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; } }*/ }