package client.messages.commands;
import client.*;
import client.inventory.*;
import client.messages.CommandProcessorUtil;
import client.messages.PlayerGMRank;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import constants.GameConstants;
import custom.LoadPacket;
import database.DatabaseConnection;
import handling.RecvPacketOpcode;
import handling.SendPacketOpcode;
import handling.channel.ChannelServer;
import handling.world.World;
import handling.world.WorldBroadcastService;
import java.awt.Point;
import java.io.File;
import java.sql.SQLException;
import java.util.*;
import java.util.Map.Entry;
import provider.MapleData;
import provider.MapleDataProvider;
import provider.MapleDataProviderFactory;
import scripting.portal.PortalScriptManager;
import scripting.reactor.ReactorScriptManager;
import server.*;
import server.Timer;
import server.Timer.BuffTimer;
import server.Timer.CloneTimer;
import server.Timer.EtcTimer;
import server.Timer.EventTimer;
import server.Timer.MapTimer;
import server.Timer.WorldTimer;
import server.life.*;
import server.maps.*;
import server.quest.MapleQuest;
import server.shop.MapleShopFactory;
import tools.HexTool;
import tools.MaplePacketCreator;
import tools.Pair;
import tools.StringUtil;
import tools.packet.MobPacket;
import tools.packet.NPCPacket;
/**
*
* @author Emilyx3
*/
public class SuperGMCommand {
public static PlayerGMRank getPlayerLevelRequired() {
return PlayerGMRank.SUPERGM;
}
public static class 搜索物品 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <搜索信息>");
return 0;
}
String search = StringUtil.joinStringFrom(splitted, 1);
String result = "";
MapleData data = null;
MapleDataProvider dataProvider = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath", "wz") + "/String.wz"));
List<String> retItems = new ArrayList<>();
int selection = 0;
for (ItemInformation itemPair : MapleItemInformationProvider.getInstance().getAllItems()) {
if (itemPair != null && itemPair.name != null && itemPair.name.toLowerCase().contains(search.toLowerCase())) {
retItems.add("\r\n#L" + selection + "##b" + itemPair.itemId + " " + " #k- " + " #r#z" + itemPair.itemId + "##k");
selection++;
}
}
if (retItems != null && retItems.size() > 0) {
for (String singleRetItem : retItems) {
if (result.length() < 10000) {
result += singleRetItem;
} else {
result += "\r\n#b无法载入所有物品, 因为搜索出来的数量太多了#k";
c.getSession().write(NPCPacket.sendNPCSay(9010000,result));
return 1;
}
}
} else {
result = "找不到物品";
}
c.getSession().write(NPCPacket.sendNPCSay(9010000,result));
return 1;
}
}
public static class 服务器公告 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 4) {
c.getPlayer().dropMessage(6, splitted[0] + " <类型> <频道> <内容>");
return 0;
}
for (MapleCharacter all : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
all.getClient().getChannelServer().broadcastMessage(MaplePacketCreator.serverNotice(Integer.parseInt(splitted[1]), Integer.parseInt(splitted[2]), StringUtil.joinStringFrom(splitted, 3)));
}
return 1;
}
}
/*public static class SpecialMessage extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter all : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
all.getClient().getChannelServer().broadcastMessage(MaplePacketCreator.getSpecialMsg(StringUtil.joinStringFrom(splitted, 2), Integer.parseInt(splitted[1]), true));
}
return 1;
}
}*/
/*public static class HideSpecialMessage extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter all : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
all.getClient().getChannelServer().broadcastMessage(MaplePacketCreator.getSpecialMsg("", 0, false));
}
return 1;
}
}*/
public static class 定时更变地图 extends CommandExecute {
@Override
public int execute(final MapleClient c, String splitted[]) {
if (splitted.length < 4) {
c.getPlayer().dropMessage(6, splitted[0] + " <初始地图ID> <更变后的地图ID> <时间:秒>");
return 0;
}
final int map = Integer.parseInt(splitted[1]);
final int nextmap = Integer.parseInt(splitted[2]);
final int time = Integer.parseInt(splitted[3]);
c.getChannelServer().getMapFactory().getMap(map).broadcastMessage(MaplePacketCreator.getClock(time));
c.getChannelServer().getMapFactory().getMap(map).startMapEffect("计时结束后你将被传送离开此地图。", 5120041);
EventTimer.getInstance().schedule(new Runnable() {
@Override
public void run() {
for (MapleCharacter mch : c.getChannelServer().getMapFactory().getMap(map).getCharacters()) {
if (mch == null) {
return;
} else {
mch.changeMap(nextmap, 0);
}
}
}
}, time * 1000); // seconds
return 1;
}
}
public static class 设置名字 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <玩家新名字>");
return 0;
}
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (victim == null) {
c.getPlayer().dropMessage(6, "找不到该玩家");
return 0;
}
if (c.getPlayer().getGMLevel() < victim.getGMLevel()) {
c.getPlayer().dropMessage(6, "你没有权限更改比你高级的管理员的名字");
return 0;
}
victim.getClient().getSession().close(true);
victim.getClient().disconnect(true, false);
victim.setName(splitted[2]);
return 1;
}
}
public static class 弹窗 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter mch : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
if (splitted.length > 1) {
StringBuilder sb = new StringBuilder();
sb.append(StringUtil.joinStringFrom(splitted, 1));
mch.dropMessage(1, sb.toString());
} else {
c.getPlayer().dropMessage(6, splitted[0] + " <内容>");
return 0;
}
}
return 1;
}
}
public static class 存档 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter mch : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
mch.saveToDB(false, false);
}
c.getPlayer().dropMessage(0, "存档成功");
return 1;
}
}
public static class 给予技能 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <角色名字> <技能ID> (技能等级:默认1) (技能最高等级:默认1)");
return 0;
}
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
Skill skill = SkillFactory.getSkill(Integer.parseInt(splitted[2]));
byte level = (byte) CommandProcessorUtil.getOptionalIntArg(splitted, 3, 1);
byte masterlevel = (byte) CommandProcessorUtil.getOptionalIntArg(splitted, 4, 1);
if (level > skill.getMaxLevel()) {
level = (byte) skill.getMaxLevel();
}
if (masterlevel > skill.getMaxLevel()) {
masterlevel = (byte) skill.getMaxLevel();
}
victim.changeSingleSkillLevel(skill, level, masterlevel);
return 1;
}
}
public static class 解封印物品 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
java.util.Map<Item, MapleInventoryType> eqs = new HashMap<>();
boolean add = false;
if (splitted.length < 2 || splitted[1].equals("全部")) {
for (MapleInventoryType type : MapleInventoryType.values()) {
for (Item item : c.getPlayer().getInventory(type)) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, type);
}
add = false;
}
}
} else if (splitted[1].equals("身上装备")) {
for (Item item : c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).newList()) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, MapleInventoryType.EQUIP);
}
add = false;
}
} else if (splitted[1].equals("装备")) {
for (Item item : c.getPlayer().getInventory(MapleInventoryType.EQUIP)) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, MapleInventoryType.EQUIP);
}
add = false;
}
} else if (splitted[1].equals("消耗")) {
for (Item item : c.getPlayer().getInventory(MapleInventoryType.USE)) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, MapleInventoryType.USE);
}
add = false;
}
} else if (splitted[1].equals("设置")) {
for (Item item : c.getPlayer().getInventory(MapleInventoryType.SETUP)) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, MapleInventoryType.SETUP);
}
add = false;
}
} else if (splitted[1].equals("其他")) {
for (Item item : c.getPlayer().getInventory(MapleInventoryType.ETC)) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, MapleInventoryType.ETC);
}
add = false;
}
} else if (splitted[1].equals("特殊")) {
for (Item item : c.getPlayer().getInventory(MapleInventoryType.CASH)) {
if (ItemFlag.封印.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.封印.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (ItemFlag.不可交易.check(item.getFlag())) {
item.setFlag((byte) (item.getFlag() - ItemFlag.不可交易.getValue()));
add = true;
//c.getSession().write(CField.updateSpecialItemUse(item, type.getType()));
}
if (add) {
eqs.put(item, MapleInventoryType.CASH);
}
add = false;
}
} else {
c.getPlayer().dropMessage(6, splitted[0] + " (物品类型:全部(空)/身上装备/装备/消耗/其他/设置/特殊)");
}
for (Entry<Item, MapleInventoryType> eq : eqs.entrySet()) {
c.getPlayer().forceReAddItem_NoUpdate(eq.getKey().copy(), eq.getValue());
}
return 1;
}
}
public static class 扔 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <道具ID> (数量:默认1)");
return 0;
}
final int itemId = Integer.parseInt(splitted[1]);
final short quantity = (short) CommandProcessorUtil.getOptionalIntArg(splitted, 2, 1);
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (!ii.itemExists(itemId)) {
c.getPlayer().dropMessage(5, itemId + "不存在");
} else {
Item toDrop;
if (GameConstants.getInventoryType(itemId) == MapleInventoryType.EQUIP) {
toDrop = ii.randomizeStats((Equip) ii.getEquipById(itemId));
} else {
toDrop = new client.inventory.Item(itemId, (byte) 0, quantity, (byte) 0);
}
toDrop.setGMLog(c.getPlayer().getName() + " 使用 " + splitted[0] + " 命令制作");
toDrop.setOwner(c.getPlayer().getName());
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
}
return 1;
}
}
public static class 扔物品 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <数量> <道具名稱>");
return 0;
}
final String itemName = StringUtil.joinStringFrom(splitted, 2);
final short quantity = (short) CommandProcessorUtil.getOptionalIntArg(splitted, 1, 1);
int itemId = 0;
for (Pair<Integer, String> item : MapleItemInformationProvider.getInstance().getAllItems2()) {
if (item.getRight().toLowerCase().equals(itemName.toLowerCase())) {
itemId = item.getLeft();
break;
}
}
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (!ii.itemExists(itemId)) {
c.getPlayer().dropMessage(5, itemName + "不存在");
} else {
Item toDrop;
if (GameConstants.getInventoryType(itemId) == MapleInventoryType.EQUIP) {
toDrop = ii.getEquipById(itemId);
} else {
toDrop = new client.inventory.Item(itemId, (byte) 0, quantity, (byte) 0);
}
toDrop.setGMLog(c.getPlayer().getName() + " 使用 " + splitted[0] + " 命令制作");
toDrop.setOwner(c.getPlayer().getName());
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
}
return 1;
}
}
public static class 地图说话 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter victim : c.getPlayer().getMap().getCharactersThreadsafe()) {
if (victim.getId() != c.getPlayer().getId()) {
victim.getMap().broadcastMessage(MaplePacketCreator.getChatText(victim.getId(), StringUtil.joinStringFrom(splitted, 1), victim.isGM(), 0));
}
}
return 1;
}
}
public static class 频道说话 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (MapleCharacter victim : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
if (victim.getId() != c.getPlayer().getId()) {
victim.getMap().broadcastMessage(MaplePacketCreator.getChatText(victim.getId(), StringUtil.joinStringFrom(splitted, 1), victim.isGM(), 0));
}
}
return 1;
}
}
public static class 世界说话 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (ChannelServer cserv : ChannelServer.getAllInstances()) {
for (MapleCharacter victim : cserv.getPlayerStorage().getAllCharacters()) {
if (victim.getId() != c.getPlayer().getId()) {
victim.getMap().broadcastMessage(MaplePacketCreator.getChatText(victim.getId(), StringUtil.joinStringFrom(splitted, 1), victim.isGM(), 0));
}
}
}
return 1;
}
}
public static class 监视 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字>");
return 0;
}
MapleCharacter target = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (target != null) {
if (target.getClient().isMonitored()) {
target.getClient().setMonitored(false);
c.getPlayer().dropMessage(5, "停止了对 " + target.getName() + " 的监视");
} else {
target.getClient().setMonitored(true);
c.getPlayer().dropMessage(5, "正在对 " + target.getName() + " 进行监视");
}
} else {
c.getPlayer().dropMessage(5, "在该频道找不到此玩家");
return 0;
}
return 1;
}
}
public static class 重置玩家任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <任务ID>");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[2])).forfeit(c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]));
return 1;
}
}
public static class 开始玩家任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 4) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <任务ID> <NPCID> (customData:默认空)");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[2])).forceStart(c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]), Integer.parseInt(splitted[3]), splitted.length > 4 ? splitted[4] : null);
return 1;
}
}
public static class 完成玩家任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 4) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <任务ID> <NPCID>");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[2])).forceComplete(c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]), Integer.parseInt(splitted[3]));
return 1;
}
}
public static class Threads extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
Thread[] threads = new Thread[Thread.activeCount()];
Thread.enumerate(threads);
String filter = "";
if (splitted.length > 1) {
filter = splitted[1];
}
for (int i = 0; i < threads.length; i++) {
String tstring = threads[i].toString();
if (tstring.toLowerCase().contains(filter.toLowerCase())) {
c.getPlayer().dropMessage(6, i + ": " + tstring);
}
}
return 1;
}
}
public static class ShowTrace extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
throw new IllegalArgumentException();
}
Thread[] threads = new Thread[Thread.activeCount()];
Thread.enumerate(threads);
Thread t = threads[Integer.parseInt(splitted[1])];
c.getPlayer().dropMessage(6, t.toString() + ":");
for (StackTraceElement elem : t.getStackTrace()) {
c.getPlayer().dropMessage(6, elem.toString());
}
return 1;
}
}
public static class 开关喇叭 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
World.toggleMegaphoneMuteState();
c.getPlayer().dropMessage(6, "喇叭状态 : " + (c.getChannelServer().getMegaphoneMuteState() ? "可用" : "不可用"));
return 1;
}
}
public static class 放置反应堆 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <ReactorID>");
return 0;
}
MapleReactor reactor = new MapleReactor(MapleReactorFactory.getReactor(Integer.parseInt(splitted[1])), Integer.parseInt(splitted[1]));
reactor.setDelay(-1);
c.getPlayer().getMap().spawnReactorOnGroundBelow(reactor, new Point(c.getPlayer().getTruePosition().x, c.getPlayer().getTruePosition().y - 20));
return 1;
}
}
/*public static class ClearSquads extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
final Collection<MapleSquad> squadz = new ArrayList<>(c.getChannelServer().getAllSquads().values());
for (MapleSquad squads : squadz) {
squads.clear();
}
return 1;
}
}*/
public static class 伤OID怪 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <怪物OID> <伤害值>");
return 0;
}
MapleMap map = c.getPlayer().getMap();
int targetId = Integer.parseInt(splitted[1]);
int damage = Integer.parseInt(splitted[2]);
MapleMonster monster = map.getMonsterByOid(targetId);
if (monster != null) {
map.broadcastMessage(MobPacket.damageMonster(targetId, damage));
monster.damage(c.getPlayer(), damage, false);
}
return 1;
}
}
public static class 伤全图怪 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
int damage;
if (splitted.length > 2) {
int irange = Integer.parseInt(splitted[1]);
if (irange != 0) {
range = irange * irange;
}
if (splitted.length <= 2) {
damage = Integer.parseInt(splitted[2]);
} else {
map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
damage = Integer.parseInt(splitted[3]);
}
} else if (splitted.length == 2) {
damage = Integer.parseInt(splitted[1]);
} else {
c.getPlayer().dropMessage(6, splitted[0] + " (<范围:默认0全图> (地图ID:默认当前地图)) <伤害值>");
return 0;
}
if (map == null) {
c.getPlayer().dropMessage(6, "地图不存在");
return 0;
}
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
map.broadcastMessage(MobPacket.damageMonster(mob.getObjectId(), damage));
mob.damage(c.getPlayer(), damage, false);
}
return 1;
}
}
public static class 伤怪 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <伤害> <怪物ID>");
return 0;
}
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
int damage = Integer.parseInt(splitted[1]);
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
if (mob.getId() == Integer.parseInt(splitted[2])) {
map.broadcastMessage(MobPacket.damageMonster(mob.getObjectId(), damage));
mob.damage(c.getPlayer(), damage, false);
}
}
return 1;
}
}
public static class 杀怪 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <怪物ID>");
return 0;
}
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
if (mob.getId() == Integer.parseInt(splitted[1])) {
mob.damage(c.getPlayer(), (int) mob.getHp(), false);
}
}
return 1;
}
}
public static class 清怪爆物 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " (<范围:默认0全图> (地图:默认当前地图))");
}
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
if (splitted.length > 1) {
//&& !splitted[0].equals("!killmonster") && !splitted[0].equals("!hitmonster") && !splitted[0].equals("!hitmonsterbyoid") && !splitted[0].equals("!killmonsterbyoid")) {
int irange = Integer.parseInt(splitted[1]);
if (irange != 0) {
range = irange * irange;
}
if (splitted.length > 2) {
map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
}
}
if (map == null) {
c.getPlayer().dropMessage(6, "地图不存在");
return 0;
}
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
map.killMonster(mob, c.getPlayer(), true, false, (byte) 1);
}
return 1;
}
}
public static class 清怪获得经验 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " (<范围:默认0全图> (地图:默认当前地图))");
}
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
if (splitted.length > 1) {
//&& !splitted[0].equals("!killmonster") && !splitted[0].equals("!hitmonster") && !splitted[0].equals("!hitmonsterbyoid") && !splitted[0].equals("!killmonsterbyoid")) {
int irange = Integer.parseInt(splitted[1]);
if (irange != 0) {
range = irange * irange;
}
if (splitted.length > 2) {
map = c.getChannelServer().getMapFactory().getMap(Integer.parseInt(splitted[2]));
}
}
if (map == null) {
c.getPlayer().dropMessage(6, "地图不存在");
return 0;
}
MapleMonster mob;
for (MapleMapObject monstermo : map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays.asList(MapleMapObjectType.MONSTER))) {
mob = (MapleMonster) monstermo;
mob.damage(c.getPlayer(), (int) mob.getHp(), false);
}
return 1;
}
}
public static class 添加临时NPC extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <NPCID>");
return 0;
}
int npcId = Integer.parseInt(splitted[1]);
MapleNPC npc = MapleLifeFactory.getNPC(npcId);
if (npc != null && !npc.getName().equals("MISSINGNO")) {
npc.setPosition(c.getPlayer().getPosition());
npc.setCy(c.getPlayer().getPosition().y);
npc.setRx0(c.getPlayer().getPosition().x + 50);
npc.setRx1(c.getPlayer().getPosition().x - 50);
npc.setFh(c.getPlayer().getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
npc.setCustom(true);
c.getPlayer().getMap().addMapObject(npc);
c.getPlayer().getMap().broadcastMessage(NPCPacket.spawnNPC(npc, true));
} else {
c.getPlayer().dropMessage(6, "你输入了一个无效的NPCID");
return 0;
}
return 1;
}
}
public static class 添加NPC extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <NPCID>");
return 0;
}
int npcId = Integer.parseInt(splitted[1]);
MapleNPC npc = MapleLifeFactory.getNPC(npcId);
if (npc != null && !npc.getName().equals("MISSINGNO")) {
final int xpos = c.getPlayer().getPosition().x;
final int ypos = c.getPlayer().getPosition().y;
final int fh = c.getPlayer().getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId();
npc.setPosition(c.getPlayer().getPosition());
npc.setCy(ypos);
npc.setRx0(xpos);
npc.setRx1(xpos);
npc.setFh(fh);
npc.setCustom(true);
try {
Connection con = (Connection) DatabaseConnection.getConnection();
try (PreparedStatement ps = (PreparedStatement) con.prepareStatement("INSERT INTO wz_customlife (dataid, f, hide, fh, cy, rx0, rx1, type, x, y, mid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
ps.setInt(1, npcId);
ps.setInt(2, 0); // 1 = right , 0 = left
ps.setInt(3, 0); // 1 = hide, 0 = show
ps.setInt(4, fh);
ps.setInt(5, ypos);
ps.setInt(6, xpos);
ps.setInt(7, xpos);
ps.setString(8, "n");
ps.setInt(9, xpos);
ps.setInt(10, ypos);
ps.setInt(11, c.getPlayer().getMapId());
ps.executeUpdate();
ps.close();
}
} catch (SQLException e) {
c.getPlayer().dropMessage(6, "将NPC添加到数据库失败");
}
c.getPlayer().getMap().addMapObject(npc);
c.getPlayer().getMap().broadcastMessage(NPCPacket.spawnNPC(npc, true));
c.getPlayer().dropMessage(6, "请不要重载此地图, 否则服务器重启后NPC会消失");
} else {
c.getPlayer().dropMessage(6, "你输入了一个无效的NPCID");
return 0;
}
return 1;
}
}
public static class 添加怪物 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <怪物ID> <数量>");
return 0;
}
int mobid = Integer.parseInt(splitted[1]);
int mobTime = Integer.parseInt(splitted[2]);
MapleMonster npc;
try {
npc = MapleLifeFactory.getMonster(mobid);
} catch (RuntimeException e) {
c.getPlayer().dropMessage(5, "错误: " + e.getMessage());
return 0;
}
if (npc != null) {
final int xpos = c.getPlayer().getPosition().x;
final int ypos = c.getPlayer().getPosition().y;
final int fh = c.getPlayer().getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId();
npc.setPosition(c.getPlayer().getPosition());
npc.setCy(ypos);
npc.setRx0(xpos);
npc.setRx1(xpos);
npc.setFh(fh);
try {
Connection con = (Connection) DatabaseConnection.getConnection();
try (PreparedStatement ps = (PreparedStatement) con.prepareStatement("INSERT INTO wz_customlife (dataid, f, hide, fh, cy, rx0, rx1, type, x, y, mid, mobtime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
ps.setInt(1, mobid);
ps.setInt(2, 0); // 1 = right , 0 = left
ps.setInt(3, 0); // 1 = hide, 0 = show
ps.setInt(4, fh);
ps.setInt(5, ypos);
ps.setInt(6, xpos);
ps.setInt(7, xpos);
ps.setString(8, "m");
ps.setInt(9, xpos);
ps.setInt(10, ypos);
ps.setInt(11, c.getPlayer().getMapId());
ps.setInt(12, mobTime);
ps.executeUpdate();
ps.close();
}
} catch (SQLException e) {
c.getPlayer().dropMessage(6, "将怪物添加到数据库失败");
}
c.getPlayer().getMap().addMonsterSpawn(npc, mobTime, (byte) -1, null);
c.getPlayer().dropMessage(6, "请不要重载此地图, 否则服务器重启后怪物会消失");
} else {
c.getPlayer().dropMessage(6, "你输入了一个无效的怪物ID");
return 0;
}
return 1;
}
}
public static class sendFilePacket extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getSession().write(LoadPacket.getPacket());
return 1;
}
}
public static class 封包 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length > 1) {
c.getSession().write(MaplePacketCreator.getPacketFromHexString(StringUtil.joinStringFrom(splitted, 1)));
} else {
c.getPlayer().dropMessage(6, "请输入数据包数据");
}
return 1;
}
}
public static class 重载地图 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <地图ID>");
return 0;
}
final int mapId = Integer.parseInt(splitted[1]);
for (ChannelServer cserv : ChannelServer.getAllInstances()) {
if (cserv.getMapFactory().isMapLoaded(mapId) && cserv.getMapFactory().getMap(mapId).getCharactersSize() > 0) {
c.getPlayer().dropMessage(5, "目标地图的" + cserv.getChannel() + "频道有角色在,无法重载");
return 0;
}
}
for (ChannelServer cserv : ChannelServer.getAllInstances()) {
if (cserv.getMapFactory().isMapLoaded(mapId)) {
cserv.getMapFactory().removeMap(mapId);
}
}
return 1;
}
}
public static class 生怪 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().getMap().respawn(true);
return 1;
}
}
public abstract static class TestTimer extends CommandExecute {
protected Timer toTest = null;
@Override
public int execute(final MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <时间:秒>");
return 0;
}
final int sec = Integer.parseInt(splitted[1]);
c.getPlayer().dropMessage(5, "Message will pop up in " + sec + " seconds.");
c.getPlayer().dropMessage(5, "Active: " + toTest.getSES().getActiveCount() + " Core: " + toTest.getSES().getCorePoolSize() + " Largest: " + toTest.getSES().getLargestPoolSize() + " Max: " + toTest.getSES().getMaximumPoolSize() + " Current: " + toTest.getSES().getPoolSize() + " Status: " + toTest.getSES().isShutdown() + toTest.getSES().isTerminated() + toTest.getSES().isTerminating());
final long oldMillis = System.currentTimeMillis();
toTest.schedule(new Runnable() {
@Override
public void run() {
c.getPlayer().dropMessage(5, "Message has popped up in " + ((System.currentTimeMillis() - oldMillis) / 1000) + " seconds, expected was " + sec + " seconds");
c.getPlayer().dropMessage(5, "Active: " + toTest.getSES().getActiveCount() + " Core: " + toTest.getSES().getCorePoolSize() + " Largest: " + toTest.getSES().getLargestPoolSize() + " Max: " + toTest.getSES().getMaximumPoolSize() + " Current: " + toTest.getSES().getPoolSize() + " Status: " + toTest.getSES().isShutdown() + toTest.getSES().isTerminated() + toTest.getSES().isTerminating());
}
}, sec * 1000);
return 1;
}
}
public static class 测试Event线程 extends TestTimer {
public 测试Event线程() {
toTest = EventTimer.getInstance();
}
}
public static class 测试Clone线程 extends TestTimer {
public 测试Clone线程() {
toTest = CloneTimer.getInstance();
}
}
public static class 测试Etc线程 extends TestTimer {
public 测试Etc线程() {
toTest = EtcTimer.getInstance();
}
}
public static class 测试地图线程 extends TestTimer {
public 测试地图线程() {
toTest = MapTimer.getInstance();
}
}
public static class 测试World线程 extends TestTimer {
public 测试World线程() {
toTest = WorldTimer.getInstance();
}
}
public static class 测试Buff线程 extends TestTimer {
public 测试Buff线程() {
toTest = BuffTimer.getInstance();
}
}
public static class Crash 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.getClient().getSession().write(HexTool.getByteArrayFromHexString("1A 00")); //give_buff with no data :D
return 1;
} else {
c.getPlayer().dropMessage(6, "受害者不存在");
return 0;
}
}
}
/*public static class 重载IP监控 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleServerHandler.reloadLoggedIPs();
return 1;
}
}
public static class 添加IP监控 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <ID地址>");
return 0;
}
MapleServerHandler.addIP(splitted[1]);
return 1;
}
}*/
public static class Subcategory extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().setSubcategory(Byte.parseByte(splitted[1]));
return 1;
}
}
public static class 最大金币 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字>");
return 0;
}
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
victim.gainMeso(9999999999L - c.getPlayer().getMeso(), true);
return 1;
}
}
public static class 金币 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <金额>");
return 0;
}
c.getPlayer().gainMeso(Long.parseLong(splitted[1]), true);
return 1;
}
}
public static class 给予金币 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <金额>");
return 0;
}
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
victim.gainMeso(Long.parseLong(splitted[2]), true);
return 1;
}
}
public static class 给予点券 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <点数>");
return 0;
}
victim.modifyCSPoints(1, Integer.parseInt(splitted[2]), true);
return 1;
}
}
public static class 获得抵用卷 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <点数>");
return 0;
}
c.getPlayer().modifyCSPoints(2, Integer.parseInt(splitted[1]), true);
return 1;
}
}
public static class GainP extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(5, "Need amount.");
return 0;
}
c.getPlayer().setPoints(c.getPlayer().getPoints() + Integer.parseInt(splitted[1]));
return 1;
}
}
public static class GainVP extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(5, "Need amount.");
return 0;
}
c.getPlayer().setVPoints(c.getPlayer().getVPoints() + Integer.parseInt(splitted[1]));
return 1;
}
}
public static class 设置服务器包头 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <包名> <包头值>");
return 0;
}
SendPacketOpcode.valueOf(splitted[1]).setValue(Byte.parseByte(splitted[2]));
return 1;
}
}
public static class 设置客户端包头 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <包名> <包头值>");
return 0;
}
RecvPacketOpcode.valueOf(splitted[1]).setValue(Byte.parseByte(splitted[2]));
return 1;
}
}
public static class 重载爆物 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleMonsterInformationProvider.getInstance().clearDrops();
ReactorScriptManager.getInstance().clearDrops();
return 1;
}
}
public static class 重载传送点 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
PortalScriptManager.getInstance().clearScripts();
return 1;
}
}
public static class 重载商店 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleShopFactory.getInstance().clear();
return 1;
}
}
public static class 重载事件 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
for (ChannelServer instance : ChannelServer.getAllInstances()) {
instance.reloadEvents();
}
return 1;
}
}
public static class 重置地图 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().getMap().resetFully();
return 1;
}
}
public static class 重置任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <任务ID>");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[1])).forfeit(c.getPlayer());
return 1;
}
}
public static class 开始任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <任务ID> <NPCID>");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[1])).start(c.getPlayer(), Integer.parseInt(splitted[2]));
return 1;
}
}
public static class 完成任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 5) {
c.getPlayer().dropMessage(6, splitted[0] + " <任务ID> <NPCID> <selection>");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[1])).complete(c.getPlayer(), Integer.parseInt(splitted[2]), Integer.parseInt(splitted[3]));
return 1;
}
}
public static class 开始自定义数据任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 4) {
c.getPlayer().dropMessage(6, splitted[0] + " <任务ID> <NPCID> (customData:默认空)");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[1])).forceStart(c.getPlayer(), Integer.parseInt(splitted[2]), splitted.length >= 4 ? splitted[3] : null);
return 1;
}
}
public static class 完成自定义数据任务 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <任务ID> <NPCID>");
return 0;
}
MapleQuest.getInstance(Integer.parseInt(splitted[1])).start(c.getPlayer(), Integer.parseInt(splitted[2]));
return 1;
}
}
public static class 任务信息 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <任务ID> (customData:默认空)");
return 0;
}
// c.getPlayer().updateInfoQuest(Integer.parseInt(splitted[1]), splitted.length >= 3 ? splitted[2] : null);
return 1;
}
}
public static class 玩家任务信息 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <任务ID> (customData:默认空)");
return 0;
}
MapleCharacter player = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (player == null) {
c.getPlayer().dropMessage(6, "玩家不存在");
return 0;
}
// player.updateInfoQuest(Integer.parseInt(splitted[1]), splitted.length >= 3 ? splitted[2] : null);
return 1;
}
}
public static class 攻击反应堆 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <ReactorOID>");
return 0;
}
c.getPlayer().getMap().getReactorByOid(Integer.parseInt(splitted[1])).hitReactor(c);
return 1;
}
}
public static class 攻击脚本反应堆 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <ReactorOID>");
return 0;
}
c.getPlayer().getMap().getReactorByOid(Integer.parseInt(splitted[1])).forceHitReactor(Byte.parseByte(splitted[2]));
return 1;
}
}
public static class 破坏反应堆 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <全部/Reactor名称>");
return 0;
}
MapleMap map = c.getPlayer().getMap();
List<MapleMapObject> reactors = map.getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.REACTOR));
if (splitted[1].equals("全部")) {
for (MapleMapObject reactorL : reactors) {
MapleReactor reactor2l = (MapleReactor) reactorL;
c.getPlayer().getMap().destroyReactor(reactor2l.getObjectId());
}
} else {
c.getPlayer().getMap().destroyReactor(Integer.parseInt(splitted[1]));
}
return 1;
}
}
public static class 设置反应堆 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <ReactorID>");
return 0;
}
c.getPlayer().getMap().setReactorState(Byte.parseByte(splitted[1]));
return 1;
}
}
public static class 重置反应堆 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().getMap().resetReactors();
return 1;
}
}
public static class 发送留言 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
MapleCharacter victim = c.getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
if (splitted.length >= 3) {
String text = StringUtil.joinStringFrom(splitted, 1);
c.getPlayer().sendNote(victim.getName(), text);
} else {
c.getPlayer().dropMessage(6, splitted[0] + " <玩家名字> <内容>");
return 0;
}
return 1;
}
}
public static class 给所有人发送留言 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length >= 2) {
String text = StringUtil.joinStringFrom(splitted, 1);
for (MapleCharacter mch : c.getChannelServer().getPlayerStorage().getAllCharacters()) {
c.getPlayer().sendNote(mch.getName(), text);
}
} else {
c.getPlayer().dropMessage(6, splitted[0] + " <内容>");
return 0;
}
return 1;
}
}
public static class 增益技能 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <技能ID> <技能等级>");
return 0;
}
SkillFactory.getSkill(Integer.parseInt(splitted[1])).getEffect(Integer.parseInt(splitted[2])).applyTo(c.getPlayer());
return 0;
}
}
public static class 增益物品 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <物品ID>");
return 0;
}
MapleItemInformationProvider.getInstance().getItemEffect(Integer.parseInt(splitted[1])).applyTo(c.getPlayer());
return 0;
}
}
public static class 增益物品EX extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <物品ID>");
return 0;
}
MapleItemInformationProvider.getInstance().getItemEffectEX(Integer.parseInt(splitted[1])).applyTo(c.getPlayer());
return 0;
}
}
public static class 取消技能增益 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <技能ID>");
return 0;
}
c.getPlayer().dispelBuff(Integer.parseInt(splitted[1]));
return 1;
}
}
public static class 地图增益技能 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 3) {
c.getPlayer().dropMessage(6, splitted[0] + " <技能ID> <技能等级>");
return 0;
}
for (MapleCharacter mch : c.getPlayer().getMap().getCharacters()) {
SkillFactory.getSkill(Integer.parseInt(splitted[1])).getEffect(Integer.parseInt(splitted[2])).applyTo(mch);
}
return 0;
}
}
public static class 地图增益物品 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <物品ID>");
return 0;
}
for (MapleCharacter mch : c.getPlayer().getMap().getCharacters()) {
MapleItemInformationProvider.getInstance().getItemEffect(Integer.parseInt(splitted[1])).applyTo(mch);
}
return 0;
}
}
public static class 地图增益物品EX extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <物品ID>");
return 0;
}
for (MapleCharacter mch : c.getPlayer().getMap().getCharacters()) {
MapleItemInformationProvider.getInstance().getItemEffectEX(Integer.parseInt(splitted[1])).applyTo(mch);
}
return 0;
}
}
public static class 漂浮公告 extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
if (splitted.length < 2) {
c.getPlayer().dropMessage(6, splitted[0] + " <物品ID> <公告信息>");
return 0;
}
int itemId = Integer.parseInt(splitted[1]);
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (!ii.itemExists(itemId)) {
c.getPlayer().dropMessage(5, itemId + " 这个道具不存在。");
return 0;
}
if (!ii.isFloatCashItem(itemId)) {
c.getPlayer().dropMessage(5, itemId + " 不具有漂浮公告的效果。");
return 0;
}
WorldBroadcastService.getInstance().startMapEffect(StringUtil.joinStringFrom(splitted, 2), itemId);
return 1;
}
}
public static class MapItemSize extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getPlayer().dropMessage(6, "Number of items: " + MapleItemInformationProvider.getInstance().getAllItems().size());
return 0;
}
}
/*public static class openUIOption extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getSession().write(CField.UIPacket.openUIOption(Integer.parseInt(splitted[1]), 9010000));
return 1;
}
}
public static class openUIWindow extends CommandExecute {
@Override
public int execute(MapleClient c, String[] splitted) {
c.getSession().write(CField.UIPacket.openUI(Integer.parseInt(splitted[1])));
return 1;
}
}*/
}