📄 commandprocessor.java
字号:
MapleCharacter victim;
if (splitted[1].charAt(0) == '-') {
level = StringUtil.countCharacters(splitted[1], 'f');
victim = cserv.getPlayerStorage().getCharacterByName(splitted[2]);
} else {
victim = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
}
victim.getClient().getSession().close();
if (level >= 1) {
victim.getClient().disconnect();
}
if (level >= 2) {
victim.saveToDB(true);
cserv.removePlayer(victim);
}
} else if (splitted[0].equals("!charinfo")) {
StringBuilder builder = new StringBuilder();
MapleCharacter other = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
builder.append(MapleClient.getLogMessage(other, ""));
builder.append(" at ");
builder.append(other.getPosition().x);
builder.append("/");
builder.append(other.getPosition().y);
builder.append(" ");
builder.append(other.getHp());
builder.append("/");
builder.append(other.getCurrentMaxHp());
builder.append("hp ");
builder.append(other.getMp());
builder.append("/");
builder.append(other.getCurrentMaxMp());
builder.append("mp ");
builder.append(other.getExp());
builder.append("exp hasParty: ");
builder.append(other.getParty() != null);
builder.append(" hasTrade: ");
builder.append(other.getTrade() != null);
mc.dropMessage(builder.toString());
other.getClient().dropDebugMessage(mc);
} else if (splitted[0].equals("!ban")) {
if (splitted.length < 3) {
new ServernoticeMapleClientMessageCallback(2, c).dropMessage("Syntaxhelper : Syntax: !ban charname reason");
return true;
}
String originalReason = StringUtil.joinStringFrom(splitted, 2);
String reason = c.getPlayer().getName() + " banned " + splitted[1] + ": " +
originalReason;
MapleCharacter target = cserv.getPlayerStorage().getCharacterByName(splitted[1]);
if (target != null) {
String readableTargetName = MapleCharacterUtil.makeMapleReadable(target.getName());
String ip = target.getClient().getSession().getRemoteAddress().toString().split(":")[0];
reason += " (IP: " + ip + ")";
target.ban(reason);
mc.dropMessage("Banned " + readableTargetName + " ipban for " + ip + " reason: " + originalReason);
} else {
if (MapleCharacter.ban(splitted[1], reason, false)) {
mc.dropMessage("Offline Banned " + splitted[1]);
} else {
mc.dropMessage("Failed to ban " + splitted[1]);
}
}
} else if (splitted[0].equals("!levelup")) {
c.getPlayer().levelUp();
int newexp = c.getPlayer().getExp();
if (newexp < 0) {
c.getPlayer().gainExp(-newexp, false, false);
}
} else if (splitted[0].equals("!whereami")) {
new ServernoticeMapleClientMessageCallback(c).dropMessage("You are on map " +
c.getPlayer().getMap().getId());
} else if (splitted[0].equals("!version")) {
new ServernoticeMapleClientMessageCallback(c)
.dropMessage("Rev $Revision: 880 $ built $LastChangedDate: 2008-04-27 06:56:05 +0800 $");
} else if (splitted[0].equals("!connected")) {
try {
Map<Integer, Integer> connected = cserv.getWorldInterface().getConnected();
StringBuilder conStr = new StringBuilder("Connected Clients: ");
boolean first = true;
for (int i : connected.keySet()) {
if (!first) {
conStr.append(", ");
} else {
first = false;
}
if (i == 0) {
conStr.append("Total: ");
conStr.append(connected.get(i));
} else {
conStr.append("Ch");
conStr.append(i);
conStr.append(": ");
conStr.append(connected.get(i));
}
}
new ServernoticeMapleClientMessageCallback(c).dropMessage(conStr.toString());
} catch (RemoteException e) {
c.getChannelServer().reconnectWorld();
}
} else if (splitted[0].equals("!whosthere")) {
MessageCallback callback = new ServernoticeMapleClientMessageCallback(c);
StringBuilder builder = new StringBuilder("Players on Map: ");
for (MapleCharacter chr : c.getPlayer().getMap().getCharacters()) {
if (builder.length() > 150) { // wild guess :o
builder.setLength(builder.length() - 2);
callback.dropMessage(builder.toString());
builder = new StringBuilder();
}
builder.append(MapleCharacterUtil.makeMapleReadable(chr.getName()));
builder.append(", ");
}
builder.setLength(builder.length() - 2);
c.getSession().write(MaplePacketCreator.serverNotice(6, builder.toString()));
} else if (splitted[0].equals("!shutdown")) {
int time = 60000;
if (splitted.length > 1) {
time = Integer.parseInt(splitted[1]) * 60000;
}
persister.run();
c.getChannelServer().shutdown(time);
} else if (splitted[0].equals("!shutdownworld")) {
int time = 60000;
if (splitted.length > 1) {
time = Integer.parseInt(splitted[1]) * 60000;
}
persister.run();
c.getChannelServer().shutdownWorld(time);
// shutdown
} else if (splitted[0].equals("!shutdownnow")) {
persister.run();
new ShutdownServer(c.getChannel()).run();
} else if (splitted[0].equals("!timerdebug")) {
TimerManager.getInstance().dropDebugInfo(mc);
} else if (splitted[0].equals("!threads")) {
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().indexOf(filter.toLowerCase()) > -1) {
mc.dropMessage(i + ": " + tstring);
}
}
} else if (splitted[0].equals("!showtrace")) {
if (splitted.length < 2) {
return true;
}
Thread[] threads = new Thread[Thread.activeCount()];
Thread.enumerate(threads);
Thread t = threads[Integer.parseInt(splitted[1])];
mc.dropMessage(t.toString() + ":");
for (StackTraceElement elem : t.getStackTrace()) {
mc.dropMessage(elem.toString());
}
} else if (splitted[0].equals("!dumpthreads")) {
Map<Thread, StackTraceElement[]> traces = Thread.getAllStackTraces();
try {
PrintWriter pw = new PrintWriter(new File("threaddump.txt"));
for (Entry<Thread, StackTraceElement[]> t : traces.entrySet()) {
pw.println(t.getKey().toString());
for (StackTraceElement elem : t.getValue()) {
pw.println(elem.toString());
}
pw.println();
}
pw.close();
} catch (FileNotFoundException e) {
log.error("ERROR", e);
}
} else if (splitted[0].equals("!reloadops")) {
try {
ExternalCodeTableGetter.populateValues(SendPacketOpcode.getDefaultProperties(), SendPacketOpcode.values());
ExternalCodeTableGetter.populateValues(RecvPacketOpcode.getDefaultProperties(), RecvPacketOpcode.values());
} catch (Exception e) {
log.error("Failed to reload props", e);
}
PacketProcessor.getProcessor(PacketProcessor.Mode.CHANNELSERVER).reset(PacketProcessor.Mode.CHANNELSERVER);
PacketProcessor.getProcessor(PacketProcessor.Mode.CHANNELSERVER).reset(PacketProcessor.Mode.CHANNELSERVER);
} else if (splitted[0].equals("!killall") || splitted[0].equals("!monsterdebug")) {
MapleMap map = c.getPlayer().getMap();
double range = Double.POSITIVE_INFINITY;
if (splitted.length > 1) {
int irange = Integer.parseInt(splitted[1]);
range = irange * irange;
}
List<MapleMapObject> monsters = map.getMapObjectsInRange(c.getPlayer().getPosition(), range, Arrays
.asList(MapleMapObjectType.MONSTER));
boolean kill = splitted[0].equals("!killall");
for (MapleMapObject monstermo : monsters) {
MapleMonster monster = (MapleMonster) monstermo;
if (kill) {
map.killMonster(monster, c.getPlayer(), false);
} else {
mc.dropMessage("Monster " + monster.toString());
}
}
if (kill) {
mc.dropMessage("Killed " + monsters.size() + " monsters <3");
}
} else if (splitted[0].equals("!skill")) {
int skill = Integer.parseInt(splitted[1]);
int level = getOptionalIntArg(splitted, 2, 1);
int masterlevel = getOptionalIntArg(splitted, 3, 1);
c.getPlayer().changeSkillLevel(SkillFactory.getSkill(skill), level, masterlevel);
} else if (splitted[0].equals("!spawndebug")) {
c.getPlayer().getMap().spawnDebug(mc);
} else if (splitted[0].equals("!door")) {
Point doorPos = new Point(player.getPosition());
doorPos.y -= 270;
MapleDoor door = new MapleDoor(c.getPlayer(), doorPos);
door.getTarget().addMapObject(door);
//c.getSession().write(MaplePacketCreator.spawnDoor(/*c.getPlayer().getId()*/ 0x1E47, door.getPosition(), false));
/*c.getSession().write(MaplePacketCreator.saveSpawnPosition(door.getPosition()));*/
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.write(HexTool.getByteArrayFromHexString("B9 00 00 47 1E 00 00 0A 04 76 FF"));
c.getSession().write(mplew.getPacket());
mplew = new MaplePacketLittleEndianWriter();
mplew.write(HexTool.getByteArrayFromHexString("36 00 00 EF 1C 0D 4C 3E 1D 0D 0A 04 76 FF"));
c.getSession().write(mplew.getPacket());
c.getSession().write(MaplePacketCreator.enableActions());
door = new MapleDoor(door);
door.getTown().addMapObject(door);
} else if (splitted[0].equals("!tdrops")) {
player.getMap().toggleDrops();
} else if (splitted[0].equals("!lowhp")) {
player.setHp(1);
player.setMp(500);
player.updateSingleStat(MapleStat.HP, 1);
player.updateSingleStat(MapleStat.MP, 500);
} else if (splitted[0].equals("!fullhp")) {
player.setHp(player.getMaxHp());
player.updateSingleStat(MapleStat.HP, player.getMaxHp());
} else if (splitted[0].equals("!cheaters")) {
try {
List<CheaterData> cheaters = c.getChannelServer().getWorldInterface().getCheaters();
for (int x = cheaters.size() - 1; x >= 0; x--) {
CheaterData cheater = cheaters.get(x);
mc.dropMessage(cheater.getInfo());
}
} catch (RemoteException e) {
c.getChannelServer().reconnectWorld();
}
} else {
mc.dropMessage("GM Command " + splitted[0] + " does not exist");
}
return true;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -