package client.messages.commands; import client.MapleClient; import client.MapleJob; import client.MapleStat; import client.inventory.Equip; import client.inventory.Item; import client.inventory.MapleInventoryType; 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.channel.ChannelServer; import java.io.File; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import provider.MapleData; import provider.MapleDataProvider; import provider.MapleDataProviderFactory; import scripting.item.ItemScriptManager; import scripting.npc.NPCScriptManager; import scripting.quest.QuestScriptManager; import server.ItemInformation; import server.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.life.MapleLifeFactory; import server.life.MapleMonster; import server.life.MapleMonsterInformationProvider; import server.maps.MapleMapObject; import server.maps.MapleMapObjectType; import server.shop.MapleShopFactory; import tools.MaplePacketCreator; import tools.Pair; import tools.StringUtil; import tools.packet.NPCPacket; /** * * @author Emilyx3 */ public class PlayerCommand { public static PlayerGMRank getPlayerLevelRequired() { return PlayerGMRank.NORMAL; } public static class ap extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 3) { c.getPlayer().dropMessage(6, splitted[0] + " str/dex/luk/int <数量>"); return 0; } String subAp = splitted[1]; int apNum = Integer.parseInt(splitted[2]); if (c.getPlayer().getRemainingAp() < apNum) { c.getPlayer().dropMessage(6, "能力点不足!"); return 0; } c.getPlayer().gainAp((short)(-apNum)); switch(subAp) { case "str": c.getPlayer().getStat().setStr((short)(apNum+c.getPlayer().getStat().getStr()),c.getPlayer()); c.getPlayer().updateSingleStat(MapleStat.力量, c.getPlayer().getStat().getStr()); break; case "dex": c.getPlayer().getStat().setDex((short)(apNum+c.getPlayer().getStat().getDex()),c.getPlayer()); c.getPlayer().updateSingleStat(MapleStat.敏捷, c.getPlayer().getStat().getDex()); break; case "luk": c.getPlayer().getStat().setLuk((short)(apNum+c.getPlayer().getStat().getLuk()),c.getPlayer()); c.getPlayer().updateSingleStat(MapleStat.运气, c.getPlayer().getStat().getLuk()); break; case "int": c.getPlayer().getStat().setInt((short)(apNum+c.getPlayer().getStat().getInt()),c.getPlayer()); c.getPlayer().updateSingleStat(MapleStat.智力, c.getPlayer().getStat().getInt()); break; default: c.getPlayer().dropMessage(6, splitted[0] + " str/dex/luk/int <数量>"); break; } return 1; } } public static class spawn extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 2) { c.getPlayer().dropMessage(6, splitted[0] + " <怪物ID>"); return 0; } int mobId = Integer.parseInt(splitted[1]); MapleMonster mob = MapleLifeFactory.getMonster(mobId); if (mob == null) { c.getPlayer().dropMessage(6, "找不到怪物: "+mobId); return 0; } c.getPlayer().getMap().spawnMonsterOnGroundBelow(mob, c.getPlayer().getPosition()); return 1; } } public static class exp extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 2) { c.getPlayer().dropMessage(6, splitted[0] + " <经验>"); return 0; } int exp = Integer.parseInt(splitted[1]); c.getPlayer().gainExp(exp); return 1; } } public static class item 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 job extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (splitted.length < 2) { c.getPlayer().dropMessage(6, splitted[0] + " <职业ID>"); return 0; } int jobid = Integer.parseInt(splitted[1]); if (!MapleJob.isExist(jobid)) { c.getPlayer().dropMessage(5, "职业ID无效"); return 0; } c.getPlayer().changeJob((short) jobid, true); c.getPlayer().setSubcategory(c.getPlayer().getSubcategory()); return 1; } } public static class warp extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted){ final int mapId = Integer.parseInt(splitted[1]); c.getPlayer().changeMap(mapId,0); return 0; } } public static class meso 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 cash 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(1,Integer.parseInt(splitted[1])); return 1; } } public static class help extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { c.getPlayer().dropMessage(6, "怀旧冒×岛所有内容还原GF设定,转职请找转职教官!"); c.getPlayer().dropMessage(6, "制作道具:@item 道具ID"); c.getPlayer().dropMessage(6, "传送到指定地图:@warp 地图ID"); c.getPlayer().dropMessage(6, "快速转职:@job 职业ID"); c.getPlayer().dropMessage(6, "快速加点:@ap str/dex/luk/int 数量 "); c.getPlayer().dropMessage(6, "加经验:@exp 经验值"); c.getPlayer().dropMessage(6, "召唤怪物:@spawn 怪物ID"); c.getPlayer().dropMessage(6, "加金币:@meso 数量"); c.getPlayer().dropMessage(6, "加点卷:@cash 数量"); 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; } 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 fp 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) { MapleShopFactory.getInstance().clear(); return 1; } } public static class 帮助 extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { StringBuilder sb = new StringBuilder(); // sb.append("\r\n@丢掉现金物品 < 可以将身上的现金物品丢到地上 >"); // sb.append("\r\n@参加活动 < 如果活动正在进行你可以使用这个命令参加活动 >"); // sb.append("\r\n@召唤炸弹 < 炸弹活动中使用的命令,可以召唤出炸弹 >"); sb.append("\r\n@呼叫管理员 < 发送消息给所有在线的管理员 >"); sb.append("\r\n@怪物 < 距离最近的怪物的信息 >"); sb.append("\r\n@解卡 < 显如果你卡死或者无法打开NPC可以使用这个命令 >"); // sb.append("\r\n@活动 < 打开活动NPC >"); sb.append("\r\n@卡图 < 只有卡图无法出来时才能使用 >"); sb.append("\r\n@获取猫头鹰 < 获得一个可以搜索怪物爆物的猫头鹰 >"); //sb.append("\r\n@获取经验卡 (倍数,默认2) < 获得一个经验值卡,每周有次数限制 >"); if (c.canClickNPC()) { NPCPacket.sendNPCSay(9010000, sb.toString()); } for (String command : sb.toString().split("\r\n")) { c.getPlayer().dropMessage(5, command); } return 1; } } public static class 呼叫管理员 extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { for (final ChannelServer cserv : ChannelServer.getAllInstances()) { cserv.broadcastGMMessage(MaplePacketCreator.multiChat("[管理员帮助] " + c.getPlayer().getName(), StringUtil.joinStringFrom(splitted, 1), 0)); } c.getPlayer().dropMessage(5, "你的消息已经发送成功"); return 1; } } public static class 卡图 extends CommandExecute { @Override public int execute(MapleClient c, String[] splitted) { if (c.getPlayer().卡图 == c.getPlayer().getMapId() && c.getPlayer().getMapId() / 1000000 != 4) { c.getPlayer().changeMap(100000000, 0); } else { c.getPlayer().dropMessage(1, "你没有卡图啊。"); } return 1; } } }