New networking.
This commit is contained in:
		| @@ -39,7 +39,6 @@ import org.l2jmobius.gameserver.handler.PunishmentHandler; | ||||
| import org.l2jmobius.gameserver.handler.TargetHandler; | ||||
| import org.l2jmobius.gameserver.handler.UserCommandHandler; | ||||
| import org.l2jmobius.gameserver.handler.VoicedCommandHandler; | ||||
| import org.l2jmobius.gameserver.network.telnet.TelnetServer; | ||||
|  | ||||
| import handlers.actionhandlers.ArtefactAction; | ||||
| import handlers.actionhandlers.DecoyAction; | ||||
| @@ -292,30 +291,6 @@ import handlers.targethandlers.affectscope.Square; | ||||
| import handlers.targethandlers.affectscope.SquarePB; | ||||
| import handlers.targethandlers.affectscope.StaticObjectScope; | ||||
| import handlers.targethandlers.affectscope.SummonExceptMaster; | ||||
| import handlers.telnethandlers.chat.Announce; | ||||
| import handlers.telnethandlers.chat.GMChat; | ||||
| import handlers.telnethandlers.chat.Msg; | ||||
| import handlers.telnethandlers.player.AccessLevel; | ||||
| import handlers.telnethandlers.player.Ban; | ||||
| import handlers.telnethandlers.player.BanChat; | ||||
| import handlers.telnethandlers.player.Enchant; | ||||
| import handlers.telnethandlers.player.GMList; | ||||
| import handlers.telnethandlers.player.Give; | ||||
| import handlers.telnethandlers.player.Jail; | ||||
| import handlers.telnethandlers.player.Kick; | ||||
| import handlers.telnethandlers.player.SendMail; | ||||
| import handlers.telnethandlers.player.Unban; | ||||
| import handlers.telnethandlers.player.UnbanChat; | ||||
| import handlers.telnethandlers.player.Unjail; | ||||
| import handlers.telnethandlers.server.ForceGC; | ||||
| import handlers.telnethandlers.server.Memusage; | ||||
| import handlers.telnethandlers.server.Performance; | ||||
| import handlers.telnethandlers.server.Purge; | ||||
| import handlers.telnethandlers.server.Reload; | ||||
| import handlers.telnethandlers.server.ServerAbort; | ||||
| import handlers.telnethandlers.server.ServerRestart; | ||||
| import handlers.telnethandlers.server.ServerShutdown; | ||||
| import handlers.telnethandlers.server.Status; | ||||
| import handlers.usercommandhandlers.ChannelDelete; | ||||
| import handlers.usercommandhandlers.ChannelInfo; | ||||
| import handlers.usercommandhandlers.ChannelLeave; | ||||
| @@ -735,35 +710,6 @@ public class MasterHandler | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (Config.TELNET_ENABLED) | ||||
| 		{ | ||||
| 			TelnetServer.getInstance().addHandler(new Announce()); | ||||
| 			TelnetServer.getInstance().addHandler(new GMChat()); | ||||
| 			TelnetServer.getInstance().addHandler(new Msg()); | ||||
| 			TelnetServer.getInstance().addHandler(new AccessLevel()); | ||||
| 			TelnetServer.getInstance().addHandler(new Ban()); | ||||
| 			TelnetServer.getInstance().addHandler(new BanChat()); | ||||
| 			TelnetServer.getInstance().addHandler(new Enchant()); | ||||
| 			TelnetServer.getInstance().addHandler(new Give()); | ||||
| 			TelnetServer.getInstance().addHandler(new GMList()); | ||||
| 			TelnetServer.getInstance().addHandler(new Jail()); | ||||
| 			TelnetServer.getInstance().addHandler(new Kick()); | ||||
| 			TelnetServer.getInstance().addHandler(new Unban()); | ||||
| 			TelnetServer.getInstance().addHandler(new UnbanChat()); | ||||
| 			TelnetServer.getInstance().addHandler(new Unjail()); | ||||
| 			TelnetServer.getInstance().addHandler(new ForceGC()); | ||||
| 			TelnetServer.getInstance().addHandler(new Memusage()); | ||||
| 			TelnetServer.getInstance().addHandler(new Performance()); | ||||
| 			TelnetServer.getInstance().addHandler(new Purge()); | ||||
| 			TelnetServer.getInstance().addHandler(new Reload()); | ||||
| 			TelnetServer.getInstance().addHandler(new SendMail()); | ||||
| 			TelnetServer.getInstance().addHandler(new ServerAbort()); | ||||
| 			TelnetServer.getInstance().addHandler(new ServerRestart()); | ||||
| 			TelnetServer.getInstance().addHandler(new ServerShutdown()); | ||||
| 			TelnetServer.getInstance().addHandler(new Status()); | ||||
| 			TelnetServer.getInstance().addHandler(new handlers.telnethandlers.server.Debug()); | ||||
| 		} | ||||
| 		 | ||||
| 		for (IHandler<?, ?> loadInstance : LOAD_INSTANCES) | ||||
| 		{ | ||||
| 			LOGGER.info(loadInstance.getClass().getSimpleName() + ": Loaded " + loadInstance.size() + " handlers."); | ||||
|   | ||||
| @@ -1123,7 +1123,7 @@ public class AdminEditChar implements IAdminCommandHandler | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			ip = client.getConnectionAddress().getHostAddress(); | ||||
| 			ip = client.getIp(); | ||||
| 		} | ||||
| 		 | ||||
| 		final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1); | ||||
| @@ -1332,7 +1332,7 @@ public class AdminEditChar implements IAdminCommandHandler | ||||
| 					continue; | ||||
| 				} | ||||
| 				 | ||||
| 				ip = client.getConnectionAddress().getHostAddress(); | ||||
| 				ip = client.getIp(); | ||||
| 				if (!ip.equals(ipAdress)) | ||||
| 				{ | ||||
| 					continue; | ||||
| @@ -1426,7 +1426,7 @@ public class AdminEditChar implements IAdminCommandHandler | ||||
| 				continue; | ||||
| 			} | ||||
| 			 | ||||
| 			ip = client.getConnectionAddress().getHostAddress(); | ||||
| 			ip = client.getIp(); | ||||
| 			if (ipMap.get(ip) == null) | ||||
| 			{ | ||||
| 				ipMap.put(ip, new ArrayList<>()); | ||||
| @@ -1479,7 +1479,7 @@ public class AdminEditChar implements IAdminCommandHandler | ||||
| 				continue; | ||||
| 			} | ||||
| 			 | ||||
| 			final IpPack pack = new IpPack(client.getConnectionAddress().getHostAddress(), client.getTrace()); | ||||
| 			final IpPack pack = new IpPack(client.getIp(), client.getTrace()); | ||||
| 			if (ipMap.get(pack) == null) | ||||
| 			{ | ||||
| 				ipMap.put(pack, new ArrayList<>()); | ||||
|   | ||||
| @@ -38,11 +38,11 @@ import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.Earthquake; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ExRedSky; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.PlaySound; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ServerPacket; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SocialAction; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SunRise; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SunSet; | ||||
| @@ -717,7 +717,7 @@ public class AdminEffects implements IAdminCommandHandler | ||||
| 	 */ | ||||
| 	private void adminAtmosphere(String type, String state, int duration, Player activeChar) | ||||
| 	{ | ||||
| 		IClientOutgoingPacket packet = null; | ||||
| 		ServerPacket packet = null; | ||||
| 		if (type.equals("sky")) | ||||
| 		{ | ||||
| 			if (state.equals("night")) | ||||
|   | ||||
| @@ -1,56 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.chat; | ||||
|  | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Broadcast; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Announce implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "announce"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Announce <text>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final StringBuilder sb = new StringBuilder(); | ||||
| 		for (String str : args) | ||||
| 		{ | ||||
| 			sb.append(str + " "); | ||||
| 		} | ||||
| 		Broadcast.toAllOnlinePlayers(sb.toString()); | ||||
| 		return "Announcement sent!"; | ||||
| 	} | ||||
| } | ||||
| @@ -1,58 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.chat; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.xml.AdminData; | ||||
| import org.l2jmobius.gameserver.enums.ChatType; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.CreatureSay; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class GMChat implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "gmchat"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Gmchat <text>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final StringBuilder sb = new StringBuilder(); | ||||
| 		for (String str : args) | ||||
| 		{ | ||||
| 			sb.append(str + " "); | ||||
| 		} | ||||
| 		AdminData.getInstance().broadcastToGMs(new CreatureSay(null, ChatType.ALLIANCE, "Telnet GM Broadcast", sb.toString())); | ||||
| 		return "GMChat sent!"; | ||||
| 	} | ||||
| } | ||||
| @@ -1,64 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.chat; | ||||
|  | ||||
| import org.l2jmobius.gameserver.enums.ChatType; | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.CreatureSay; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Msg implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "msg"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Msg <player> <text>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length < 2) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final Player player = World.getInstance().getPlayer(args[0]); | ||||
| 		if (player != null) | ||||
| 		{ | ||||
| 			final StringBuilder sb = new StringBuilder(); | ||||
| 			for (int i = 1; i < args.length; i++) | ||||
| 			{ | ||||
| 				sb.append(args[i] + " "); | ||||
| 			} | ||||
| 			player.sendPacket(new CreatureSay(null, ChatType.WHISPER, "Telnet Priv", sb.toString())); | ||||
| 			return "Announcement sent!"; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,59 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class AccessLevel implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "accesslevel"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "AccessLevel <player name> <access level>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length < 2) || args[0].isEmpty() || !Util.isDigit(args[1])) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final Player player = World.getInstance().getPlayer(args[0]); | ||||
| 		if (player != null) | ||||
| 		{ | ||||
| 			final int level = Integer.parseInt(args[1]); | ||||
| 			player.setAccessLevel(level, true, true); | ||||
| 			return "Player " + player.getName() + "'s access level has been changed to: " + level; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,84 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.PunishmentManager; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentTask; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentType; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Ban implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "ban"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Ban <player name> [time in minutes]"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			if (PunishmentManager.getInstance().hasPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.BAN)) | ||||
| 			{ | ||||
| 				return "Player is already banned."; | ||||
| 			} | ||||
| 			long time = -1; | ||||
| 			String reason = "You have been banned by telnet admin."; | ||||
| 			if (args.length > 1) | ||||
| 			{ | ||||
| 				final String token = args[1]; | ||||
| 				if (Util.isDigit(token)) | ||||
| 				{ | ||||
| 					time = Integer.parseInt(token) * 60 * 1000; | ||||
| 					time += System.currentTimeMillis(); | ||||
| 				} | ||||
| 				if (args.length > 2) | ||||
| 				{ | ||||
| 					reason = args[2]; | ||||
| 					for (int i = 3; i < args.length; i++) | ||||
| 					{ | ||||
| 						reason += " " + args[i]; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			PunishmentManager.getInstance().startPunishment(new PunishmentTask(objectId, PunishmentAffect.CHARACTER, PunishmentType.BAN, time, reason, "Telnet Admin")); | ||||
| 			return "Player has been successfully banned."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,84 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.PunishmentManager; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentTask; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentType; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author lion | ||||
|  */ | ||||
| public class BanChat implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "ban_chat"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "ban_chat <player name> [time in minutes]"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			if (PunishmentManager.getInstance().hasPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN)) | ||||
| 			{ | ||||
| 				return "Player is already chat banned."; | ||||
| 			} | ||||
| 			long time = -1; | ||||
| 			String reason = "Your chat have been banned by telnet admin."; | ||||
| 			if (args.length > 1) | ||||
| 			{ | ||||
| 				final String token = args[1]; | ||||
| 				if (Util.isDigit(token)) | ||||
| 				{ | ||||
| 					time = Integer.parseInt(token) * 60 * 1000; | ||||
| 					time += System.currentTimeMillis(); | ||||
| 				} | ||||
| 				if (args.length > 2) | ||||
| 				{ | ||||
| 					reason = args[2]; | ||||
| 					for (int i = 3; i < args.length; i++) | ||||
| 					{ | ||||
| 						reason += " " + args[i]; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			PunishmentManager.getInstance().startPunishment(new PunishmentTask(objectId, PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN, time, reason, "Telnet Admin")); | ||||
| 			return "Player has been successfully banned."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,198 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.item.instance.Item; | ||||
| import org.l2jmobius.gameserver.model.itemcontainer.Inventory; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.GMAudit; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Enchant implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "enchant"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Enchant <player name> <item id> [item amount] [item enchant]"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length < 3) || args[0].isEmpty() || !Util.isDigit(args[1]) || !Util.isDigit(args[2])) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final Player player = World.getInstance().getPlayer(args[0]); | ||||
| 		if (player != null) | ||||
| 		{ | ||||
| 			int itemType = Integer.parseInt(args[1]); | ||||
| 			int enchant = Integer.parseInt(args[2]); | ||||
| 			enchant = Math.min(enchant, 127); | ||||
| 			enchant = Math.max(enchant, 0); | ||||
| 			 | ||||
| 			switch (itemType) | ||||
| 			{ | ||||
| 				case 1: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_HEAD; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 2: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_CHEST; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 3: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_GLOVES; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 4: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_FEET; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 5: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_LEGS; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 6: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_RHAND; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 7: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_LHAND; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 8: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_LEAR; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 9: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_REAR; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 10: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_LFINGER; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 11: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_RFINGER; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 12: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_NECK; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 13: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_UNDER; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 14: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_CLOAK; | ||||
| 					break; | ||||
| 				} | ||||
| 				case 15: | ||||
| 				{ | ||||
| 					itemType = Inventory.PAPERDOLL_BELT; | ||||
| 					break; | ||||
| 				} | ||||
| 				default: | ||||
| 				{ | ||||
| 					itemType = 0; | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			final boolean success = setEnchant(player, enchant, itemType); | ||||
| 			return success ? "Item has been successfully enchanted." : "Failed to enchant player's item!"; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| 	 | ||||
| 	private boolean setEnchant(Player player, int ench, int armorType) | ||||
| 	{ | ||||
| 		// now we need to find the equipped weapon of the targeted character... | ||||
| 		int curEnchant = 0; // display purposes only | ||||
| 		Item itemInstance = null; | ||||
| 		 | ||||
| 		// only attempt to enchant if there is a weapon equipped | ||||
| 		Item parmorInstance = player.getInventory().getPaperdollItem(armorType); | ||||
| 		if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == armorType)) | ||||
| 		{ | ||||
| 			itemInstance = parmorInstance; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			// for bows/crossbows and double handed weapons | ||||
| 			parmorInstance = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); | ||||
| 			if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == Inventory.PAPERDOLL_RHAND)) | ||||
| 			{ | ||||
| 				itemInstance = parmorInstance; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (itemInstance != null) | ||||
| 		{ | ||||
| 			curEnchant = itemInstance.getEnchantLevel(); | ||||
| 			 | ||||
| 			// set enchant value | ||||
| 			player.getInventory().unEquipItemInSlot(armorType); | ||||
| 			itemInstance.setEnchantLevel(ench); | ||||
| 			player.getInventory().equipItem(itemInstance); | ||||
| 			 | ||||
| 			// send packets | ||||
| 			final InventoryUpdate iu = new InventoryUpdate(); | ||||
| 			iu.addModifiedItem(itemInstance); | ||||
| 			player.sendPacket(iu); | ||||
| 			player.broadcastUserInfo(); | ||||
| 			 | ||||
| 			// informations | ||||
| 			player.sendMessage("Changed enchantment of " + player.getName() + "'s " + itemInstance.getTemplate().getName() + " from " + curEnchant + " to " + ench + "."); | ||||
| 			player.sendMessage("Admin has changed the enchantment of your " + itemInstance.getTemplate().getName() + " from " + curEnchant + " to " + ench + "."); | ||||
| 			 | ||||
| 			// log | ||||
| 			GMAudit.auditGMAction("TelnetAdmin", "enchant", player.getName(), itemInstance.getTemplate().getName() + "(" + itemInstance.getObjectId() + ") from " + curEnchant + " to " + ench); | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| } | ||||
| @@ -1,58 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.data.xml.AdminData; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class GMList implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "gmlist"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "GMList"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		int i = 0; | ||||
| 		String gms = ""; | ||||
| 		for (String player : AdminData.getInstance().getAllGmNames(true)) | ||||
| 		{ | ||||
| 			gms += player + ", "; | ||||
| 			i++; | ||||
| 		} | ||||
| 		if (!gms.isEmpty()) | ||||
| 		{ | ||||
| 			gms = gms.substring(0, gms.length() - 2) + "."; | ||||
| 		} | ||||
| 		return "There are currently " + i + " GM(s) online..." + Config.EOL + gms; | ||||
| 	} | ||||
| } | ||||
| @@ -1,85 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.ItemTable; | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.item.instance.Item; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Give implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "give"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Give <player name> <item id> [item amount] [item enchant] [donators]"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length < 2) || args[0].isEmpty() || !Util.isDigit(args[1])) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final Player player = World.getInstance().getPlayer(args[0]); | ||||
| 		if (player != null) | ||||
| 		{ | ||||
| 			final int itemId = Integer.parseInt(args[1]); | ||||
| 			long amount = 1; | ||||
| 			int enchanted = 0; | ||||
| 			if (args.length > 2) | ||||
| 			{ | ||||
| 				String token = args[2]; | ||||
| 				if (Util.isDigit(token)) | ||||
| 				{ | ||||
| 					amount = Long.parseLong(token); | ||||
| 				} | ||||
| 				if (args.length > 3) | ||||
| 				{ | ||||
| 					token = args[3]; | ||||
| 					if (Util.isDigit(token)) | ||||
| 					{ | ||||
| 						enchanted = Integer.parseInt(token); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			final Item item = ItemTable.getInstance().createItem("Telnet-Admin", itemId, amount, player, null); | ||||
| 			if (enchanted > 0) | ||||
| 			{ | ||||
| 				item.setEnchantLevel(enchanted); | ||||
| 			} | ||||
| 			player.addItem("Telnet-Admin", item, null, true); | ||||
| 			return "Item has been successfully given to the player."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,84 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.PunishmentManager; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentTask; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentType; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Jail implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "jail"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Jail <player name> [time in minutes]"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			if (PunishmentManager.getInstance().hasPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.JAIL)) | ||||
| 			{ | ||||
| 				return "Player is already jailed."; | ||||
| 			} | ||||
| 			String reason = "You have been jailed by telnet admin."; | ||||
| 			long time = -1; | ||||
| 			if (args.length > 1) | ||||
| 			{ | ||||
| 				final String token = args[1]; | ||||
| 				if (Util.isDigit(token)) | ||||
| 				{ | ||||
| 					time = Integer.parseInt(token) * 60 * 1000; | ||||
| 					time += System.currentTimeMillis(); | ||||
| 				} | ||||
| 				if (args.length > 2) | ||||
| 				{ | ||||
| 					reason = args[2]; | ||||
| 					for (int i = 3; i < args.length; i++) | ||||
| 					{ | ||||
| 						reason += " " + args[i]; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			PunishmentManager.getInstance().startPunishment(new PunishmentTask(objectId, PunishmentAffect.CHARACTER, PunishmentType.JAIL, time, reason, "Telnet Admin")); | ||||
| 			return "Player has been successfully jailed."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,59 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.network.Disconnection; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.LeaveWorld; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Kick implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "kick"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Kick <player name>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final Player player = World.getInstance().getPlayer(args[0]); | ||||
| 		if (player != null) | ||||
| 		{ | ||||
| 			Disconnection.of(player).defaultSequence(LeaveWorld.STATIC_PACKET); | ||||
| 			return "Player has been successfully kicked."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,97 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.enums.MailType; | ||||
| import org.l2jmobius.gameserver.instancemanager.MailManager; | ||||
| import org.l2jmobius.gameserver.model.Message; | ||||
| import org.l2jmobius.gameserver.model.holders.ItemHolder; | ||||
| import org.l2jmobius.gameserver.model.itemcontainer.Mail; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author Mobius | ||||
|  */ | ||||
| public class SendMail implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "sendmail"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "sendmail <player name> <mail subject (use _ for spaces)> <mail message (use _ for spaces)> <item(s) (optional) e.g. 57x1000000>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length < 3) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			final Message msg = new Message(objectId, args[1].replace("_", " "), args[2].replace("_", " "), args.length > 3 ? MailType.PRIME_SHOP_GIFT : MailType.REGULAR); | ||||
| 			final List<ItemHolder> itemHolders = new ArrayList<>(); | ||||
| 			int counter = -1; | ||||
| 			for (String str : args) | ||||
| 			{ | ||||
| 				counter++; | ||||
| 				if (counter < 3) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
| 				if (str.toLowerCase().contains("x")) | ||||
| 				{ | ||||
| 					final String itemId = str.toLowerCase().split("x")[0]; | ||||
| 					final String itemCount = str.toLowerCase().split("x")[1]; | ||||
| 					if (Util.isDigit(itemId) && Util.isDigit(itemCount)) | ||||
| 					{ | ||||
| 						itemHolders.add(new ItemHolder(Integer.parseInt(itemId), Long.parseLong(itemCount))); | ||||
| 					} | ||||
| 				} | ||||
| 				else if (Util.isDigit(str)) | ||||
| 				{ | ||||
| 					itemHolders.add(new ItemHolder(Integer.parseInt(str), 1)); | ||||
| 				} | ||||
| 			} | ||||
| 			if (!itemHolders.isEmpty()) | ||||
| 			{ | ||||
| 				final Mail attachments = msg.createAttachments(); | ||||
| 				for (ItemHolder itemHolder : itemHolders) | ||||
| 				{ | ||||
| 					attachments.addItem("Telnet-Mail", itemHolder.getId(), itemHolder.getCount(), null, null); | ||||
| 				} | ||||
| 			} | ||||
| 			MailManager.getInstance().sendMessage(msg); | ||||
| 			return "An ingame mail has been sent to " + args[0] + "."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,63 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.PunishmentManager; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentType; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Unban implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "unban"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Unban <player name>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			if (!PunishmentManager.getInstance().hasPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.BAN)) | ||||
| 			{ | ||||
| 				return "Player is not banned at all."; | ||||
| 			} | ||||
| 			PunishmentManager.getInstance().stopPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.BAN); | ||||
| 			return "Player has been successfully unbanned."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,63 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.PunishmentManager; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentType; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class UnbanChat implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "unban_chat"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "unban_chat <player name>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			if (!PunishmentManager.getInstance().hasPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN)) | ||||
| 			{ | ||||
| 				return "Player is not banned at all."; | ||||
| 			} | ||||
| 			PunishmentManager.getInstance().stopPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN); | ||||
| 			return "Player chat has been successfully unbanned."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,63 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.player; | ||||
|  | ||||
| import org.l2jmobius.gameserver.data.sql.CharNameTable; | ||||
| import org.l2jmobius.gameserver.instancemanager.PunishmentManager; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentAffect; | ||||
| import org.l2jmobius.gameserver.model.punishment.PunishmentType; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Unjail implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "unjail"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Unjail <player name>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int objectId = CharNameTable.getInstance().getIdByName(args[0]); | ||||
| 		if (objectId > 0) | ||||
| 		{ | ||||
| 			if (!PunishmentManager.getInstance().hasPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.JAIL)) | ||||
| 			{ | ||||
| 				return "Player is not jailed at all."; | ||||
| 			} | ||||
| 			PunishmentManager.getInstance().stopPunishment(objectId, PunishmentAffect.CHARACTER, PunishmentType.JAIL); | ||||
| 			return "Player has been successfully unjailed."; | ||||
| 		} | ||||
| 		return "Couldn't find player with such name."; | ||||
| 	} | ||||
| } | ||||
| @@ -1,366 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.lang.management.ManagementFactory; | ||||
| import java.lang.management.ThreadInfo; | ||||
| import java.lang.management.ThreadMXBean; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.StandardOpenOption; | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Calendar; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Map.Entry; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import org.l2jmobius.commons.threads.ThreadPool; | ||||
| import org.l2jmobius.gameserver.GameServer; | ||||
| import org.l2jmobius.gameserver.LoginServerThread; | ||||
| import org.l2jmobius.gameserver.data.xml.AdminData; | ||||
| import org.l2jmobius.gameserver.enums.ItemLocation; | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Monster; | ||||
| import org.l2jmobius.gameserver.model.item.instance.Item; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.AdminForgePacket; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; | ||||
| import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Debug implements ITelnetCommand | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(Debug.class.getName()); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "debug"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Debug <decay/packetsend/full>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		switch (args[0]) | ||||
| 		{ | ||||
| 			case "decay": | ||||
| 			{ | ||||
| 				return DecayTaskManager.getInstance().toString(); | ||||
| 			} | ||||
| 			case "packetsend": | ||||
| 			{ | ||||
| 				if (args.length < 4) | ||||
| 				{ | ||||
| 					return "Usage: debug packetsend <charName> <packetData>"; | ||||
| 				} | ||||
| 				final Player player = World.getInstance().getPlayer(args[1]); | ||||
| 				if (player == null) | ||||
| 				{ | ||||
| 					return "Couldn't find player with such name."; | ||||
| 				} | ||||
| 				 | ||||
| 				final AdminForgePacket sp = new AdminForgePacket(); | ||||
| 				for (int i = 2; i < args.length; i++) | ||||
| 				{ | ||||
| 					final String b = args[i]; | ||||
| 					if (!b.isEmpty()) | ||||
| 					{ | ||||
| 						sp.addPart("C".getBytes()[0], "0x" + b); | ||||
| 					} | ||||
| 				} | ||||
| 				player.sendPacket(sp); | ||||
| 				return "Packet has been sent!"; | ||||
| 			} | ||||
| 			case "full": | ||||
| 			{ | ||||
| 				final Calendar cal = Calendar.getInstance(); | ||||
| 				final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); | ||||
| 				final StringBuilder sb = new StringBuilder(); | ||||
| 				sb.append(sdf.format(cal.getTime())); | ||||
| 				sb.append("\r\nServer"); | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append(getServerStatus()); | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append("\r\n## Java Platform Information ##"); | ||||
| 				sb.append("\r\nJava Runtime Name: " + System.getProperty("java.runtime.name")); | ||||
| 				sb.append("\r\nJava Version: " + System.getProperty("java.version")); | ||||
| 				sb.append("\r\nJava Class Version: " + System.getProperty("java.class.version")); | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append("\r\n## Virtual Machine Information ##"); | ||||
| 				sb.append("\r\nVM Name: " + System.getProperty("java.vm.name")); | ||||
| 				sb.append("\r\nVM Version: " + System.getProperty("java.vm.version")); | ||||
| 				sb.append("\r\nVM Vendor: " + System.getProperty("java.vm.vendor")); | ||||
| 				sb.append("\r\nVM Info: " + System.getProperty("java.vm.info")); | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append("\r\n## OS Information ##"); | ||||
| 				sb.append("\r\nName: " + System.getProperty("os.name")); | ||||
| 				sb.append("\r\nArchiteture: " + System.getProperty("os.arch")); | ||||
| 				sb.append("\r\nVersion: " + System.getProperty("os.version")); | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append("\r\n## Runtime Information ##"); | ||||
| 				sb.append("\r\nCPU Count: " + Runtime.getRuntime().availableProcessors()); | ||||
| 				sb.append("\r\nCurrent Free Heap Size: " + (Runtime.getRuntime().freeMemory() / 1024 / 1024) + " mb"); | ||||
| 				sb.append("\r\nCurrent Heap Size: " + (Runtime.getRuntime().totalMemory() / 1024 / 1024) + " mb"); | ||||
| 				sb.append("\r\nMaximum Heap Size: " + (Runtime.getRuntime().maxMemory() / 1024 / 1024) + " mb"); | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append("\r\n## Class Path Information ##\r\n"); | ||||
| 				final String cp = System.getProperty("java.class.path"); | ||||
| 				final String[] libs = cp.split(File.pathSeparator); | ||||
| 				for (String lib : libs) | ||||
| 				{ | ||||
| 					sb.append(lib); | ||||
| 					sb.append("\r\n"); | ||||
| 				} | ||||
| 				 | ||||
| 				sb.append("\r\n"); | ||||
| 				sb.append("## Threads Information ##\r\n"); | ||||
| 				final Map<Thread, StackTraceElement[]> allThread = Thread.getAllStackTraces(); | ||||
| 				final List<Entry<Thread, StackTraceElement[]>> entries = new ArrayList<>(allThread.entrySet()); | ||||
| 				Collections.sort(entries, (e1, e2) -> e1.getKey().getName().compareTo(e2.getKey().getName())); | ||||
| 				for (Entry<Thread, StackTraceElement[]> entry : entries) | ||||
| 				{ | ||||
| 					final StackTraceElement[] stes = entry.getValue(); | ||||
| 					final Thread t = entry.getKey(); | ||||
| 					sb.append("--------------\r\n"); | ||||
| 					sb.append(t + " (" + t.getId() + ")\r\n"); | ||||
| 					sb.append("State: " + t.getState() + "\r\n"); | ||||
| 					sb.append("isAlive: " + t.isAlive() + " | isDaemon: " + t.isDaemon() + " | isInterrupted: " + t.isInterrupted() + "\r\n"); | ||||
| 					sb.append("\r\n"); | ||||
| 					for (StackTraceElement ste : stes) | ||||
| 					{ | ||||
| 						sb.append(ste.toString()); | ||||
| 						sb.append("\r\n"); | ||||
| 					} | ||||
| 					sb.append("\r\n"); | ||||
| 				} | ||||
| 				 | ||||
| 				sb.append("\r\n"); | ||||
| 				final ThreadMXBean mbean = ManagementFactory.getThreadMXBean(); | ||||
| 				final long[] ids = findDeadlockedThreads(mbean); | ||||
| 				if ((ids != null) && (ids.length > 0)) | ||||
| 				{ | ||||
| 					final Thread[] threads = new Thread[ids.length]; | ||||
| 					for (int i = 0; i < threads.length; i++) | ||||
| 					{ | ||||
| 						threads[i] = findMatchingThread(mbean.getThreadInfo(ids[i])); | ||||
| 					} | ||||
| 					sb.append("Deadlocked Threads:\r\n"); | ||||
| 					sb.append("-------------------\r\n"); | ||||
| 					for (Thread thread : threads) | ||||
| 					{ | ||||
| 						System.out.println(thread); | ||||
| 						for (StackTraceElement ste : thread.getStackTrace()) | ||||
| 						{ | ||||
| 							sb.append("\t" + ste); | ||||
| 							sb.append("\r\n"); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				sb.append("\r\n## Thread Pool Manager Statistics ##\r\n"); | ||||
| 				for (String line : ThreadPool.getStats()) | ||||
| 				{ | ||||
| 					sb.append(line); | ||||
| 					sb.append("\r\n"); | ||||
| 				} | ||||
| 				 | ||||
| 				int i = 0; | ||||
| 				File f = new File("./log/Debug-" + i + ".txt"); | ||||
| 				while (f.exists()) | ||||
| 				{ | ||||
| 					i++; | ||||
| 					f = new File("./log/Debug-" + i + ".txt"); | ||||
| 				} | ||||
| 				f.getParentFile().mkdirs(); | ||||
| 				 | ||||
| 				try | ||||
| 				{ | ||||
| 					Files.write(f.toPath(), sb.toString().getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); | ||||
| 				} | ||||
| 				catch (IOException e) | ||||
| 				{ | ||||
| 					LOGGER.log(Level.WARNING, "Couldn't write packet tp.", e); | ||||
| 				} | ||||
| 				return "Debug output saved to log/" + f.getName(); | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 	 | ||||
| 	private long[] findDeadlockedThreads(ThreadMXBean mbean) | ||||
| 	{ | ||||
| 		// JDK 1.5 only supports the findMonitorDeadlockedThreads() | ||||
| 		// method, so you need to comment out the following three lines | ||||
| 		if (mbean.isSynchronizerUsageSupported()) | ||||
| 		{ | ||||
| 			return mbean.findDeadlockedThreads(); | ||||
| 		} | ||||
| 		return mbean.findMonitorDeadlockedThreads(); | ||||
| 	} | ||||
| 	 | ||||
| 	private Thread findMatchingThread(ThreadInfo inf) | ||||
| 	{ | ||||
| 		for (Thread thread : Thread.getAllStackTraces().keySet()) | ||||
| 		{ | ||||
| 			if (thread.getId() == inf.getThreadId()) | ||||
| 			{ | ||||
| 				return thread; | ||||
| 			} | ||||
| 		} | ||||
| 		throw new IllegalStateException("Deadlocked Thread not found"); | ||||
| 	} | ||||
| 	 | ||||
| 	static String getServerStatus() | ||||
| 	{ | ||||
| 		int playerCount = 0; | ||||
| 		int objectCount = 0; | ||||
| 		final int max = LoginServerThread.getInstance().getMaxPlayer(); | ||||
| 		playerCount = World.getInstance().getPlayers().size(); | ||||
| 		objectCount = World.getInstance().getVisibleObjectsCount(); | ||||
| 		int itemCount = 0; | ||||
| 		int itemVoidCount = 0; | ||||
| 		int monsterCount = 0; | ||||
| 		int minionCount = 0; | ||||
| 		int minionsGroupCount = 0; | ||||
| 		int npcCount = 0; | ||||
| 		int charCount = 0; | ||||
| 		int pcCount = 0; | ||||
| 		int detachedCount = 0; | ||||
| 		int doorCount = 0; | ||||
| 		int summonCount = 0; | ||||
| 		int aiCount = 0; | ||||
| 		for (WorldObject obj : World.getInstance().getVisibleObjects()) | ||||
| 		{ | ||||
| 			if (obj == null) | ||||
| 			{ | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (obj.isCreature() && ((Creature) obj).hasAI()) | ||||
| 			{ | ||||
| 				aiCount++; | ||||
| 			} | ||||
| 			if (obj.isItem()) | ||||
| 			{ | ||||
| 				if (((Item) obj).getItemLocation() == ItemLocation.VOID) | ||||
| 				{ | ||||
| 					itemVoidCount++; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					itemCount++; | ||||
| 				} | ||||
| 			} | ||||
| 			else if (obj.isMonster()) | ||||
| 			{ | ||||
| 				monsterCount++; | ||||
| 				if (((Monster) obj).hasMinions()) | ||||
| 				{ | ||||
| 					minionCount += ((Monster) obj).getMinionList().countSpawnedMinions(); | ||||
| 					minionsGroupCount += ((Monster) obj).getMinionList().lazyCountSpawnedMinionsGroups(); | ||||
| 				} | ||||
| 			} | ||||
| 			else if (obj.isNpc()) | ||||
| 			{ | ||||
| 				npcCount++; | ||||
| 			} | ||||
| 			else if (obj.isPlayer()) | ||||
| 			{ | ||||
| 				pcCount++; | ||||
| 				if ((((Player) obj).getClient() != null) && ((Player) obj).getClient().isDetached()) | ||||
| 				{ | ||||
| 					detachedCount++; | ||||
| 				} | ||||
| 			} | ||||
| 			else if (obj.isSummon()) | ||||
| 			{ | ||||
| 				summonCount++; | ||||
| 			} | ||||
| 			else if (obj.isDoor()) | ||||
| 			{ | ||||
| 				doorCount++; | ||||
| 			} | ||||
| 			else if (obj.isCreature()) | ||||
| 			{ | ||||
| 				charCount++; | ||||
| 			} | ||||
| 		} | ||||
| 		final StringBuilder sb = new StringBuilder(); | ||||
| 		sb.append("Server Status: "); | ||||
| 		sb.append("\r\n  --->  Player Count: " + playerCount + "/" + max); | ||||
| 		sb.append("\r\n  ---> Offline Count: " + detachedCount + "/" + playerCount); | ||||
| 		sb.append("\r\n  +-->  Object Count: " + objectCount); | ||||
| 		sb.append("\r\n  +-->      AI Count: " + aiCount); | ||||
| 		sb.append("\r\n  +.... Item(Void): " + itemVoidCount); | ||||
| 		sb.append("\r\n  +.......... Item: " + itemCount); | ||||
| 		sb.append("\r\n  +....... Monster: " + monsterCount); | ||||
| 		sb.append("\r\n  +......... Minions: " + minionCount); | ||||
| 		sb.append("\r\n  +.. Minions Groups: " + minionsGroupCount); | ||||
| 		sb.append("\r\n  +........... Npc: " + npcCount); | ||||
| 		sb.append("\r\n  +............ Player: " + pcCount); | ||||
| 		sb.append("\r\n  +........ Summon: " + summonCount); | ||||
| 		sb.append("\r\n  +.......... Door: " + doorCount); | ||||
| 		sb.append("\r\n  +.......... Creature: " + charCount); | ||||
| 		sb.append("\r\n  --->   Ingame Time: " + gameTime()); | ||||
| 		sb.append("\r\n  ---> Server Uptime: " + GameServer.getInstance().getUptime()); | ||||
| 		sb.append("\r\n  --->      GM Count: " + getOnlineGMS()); | ||||
| 		sb.append("\r\n  --->       Threads: " + Thread.activeCount()); | ||||
| 		sb.append("\r\n  RAM Used: " + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576)); // 1024 * 1024 = 1048576 | ||||
| 		sb.append("\r\n"); | ||||
| 		 | ||||
| 		return sb.toString(); | ||||
| 	} | ||||
| 	 | ||||
| 	private static int getOnlineGMS() | ||||
| 	{ | ||||
| 		return AdminData.getInstance().getAllGms(true).size(); | ||||
| 	} | ||||
| 	 | ||||
| 	private static String gameTime() | ||||
| 	{ | ||||
| 		final int t = GameTimeTaskManager.getInstance().getGameTime(); | ||||
| 		final int h = t / 60; | ||||
| 		final int m = t % 60; | ||||
| 		final SimpleDateFormat format = new SimpleDateFormat("H:mm"); | ||||
| 		final Calendar cal = Calendar.getInstance(); | ||||
| 		cal.set(Calendar.HOUR_OF_DAY, h); | ||||
| 		cal.set(Calendar.MINUTE, m); | ||||
| 		return format.format(cal.getTime()); | ||||
| 	} | ||||
| } | ||||
| @@ -1,46 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class ForceGC implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "forcegc"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "ForceGC"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		System.gc(); | ||||
| 		return "RAM Used: " + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576); | ||||
| 	} | ||||
| } | ||||
| @@ -1,69 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Memusage implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "memusage"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "MemUsage"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		final double max = Runtime.getRuntime().maxMemory() / 1024; // maxMemory is the upper | ||||
| 		// limit the jvm can use | ||||
| 		final double allocated = Runtime.getRuntime().totalMemory() / 1024; // totalMemory the | ||||
| 		// size of the current allocation pool | ||||
| 		final double nonAllocated = max - allocated; // non allocated memory till jvm limit | ||||
| 		final double cached = Runtime.getRuntime().freeMemory() / 1024; // freeMemory the | ||||
| 		// unused memory in the allocation pool | ||||
| 		final double used = allocated - cached; // really used memory | ||||
| 		final double useable = max - used; // allocated, but non-used and non-allocated memory | ||||
| 		final StringBuilder sb = new StringBuilder(); | ||||
| 		final DecimalFormat df = new DecimalFormat(" (0.0000'%')"); | ||||
| 		final DecimalFormat df2 = new DecimalFormat(" # 'KB'"); | ||||
| 		sb.append("+----" + Config.EOL); // ... | ||||
| 		sb.append("| Allowed Memory:" + df2.format(max) + Config.EOL); | ||||
| 		sb.append("|    |= Allocated Memory:" + df2.format(allocated) + df.format((allocated / max) * 100) + Config.EOL); | ||||
| 		sb.append("|    |= Non-Allocated Memory:" + df2.format(nonAllocated) + df.format((nonAllocated / max) * 100) + Config.EOL); | ||||
| 		sb.append("| Allocated Memory:" + df2.format(allocated) + Config.EOL); | ||||
| 		sb.append("|    |= Used Memory:" + df2.format(used) + df.format((used / max) * 100) + Config.EOL); | ||||
| 		sb.append("|    |= Unused (cached) Memory:" + df2.format(cached) + df.format((cached / max) * 100) + Config.EOL); | ||||
| 		sb.append("| Useable Memory:" + df2.format(useable) + df.format((useable / max) * 100) + Config.EOL); // ... | ||||
| 		sb.append("+----" + Config.EOL); | ||||
| 		return sb.toString(); | ||||
| 	} | ||||
| } | ||||
| @@ -1,53 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.commons.threads.ThreadPool; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Performance implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "performance"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Performance"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		// ThreadPoolManager.purge(); | ||||
| 		final StringBuilder sb = new StringBuilder(); | ||||
| 		for (String line : ThreadPool.getStats()) | ||||
| 		{ | ||||
| 			sb.append(line + Config.EOL); | ||||
| 		} | ||||
| 		return sb.toString(); | ||||
| 	} | ||||
| } | ||||
| @@ -1,53 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.commons.threads.ThreadPool; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Purge implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "purge"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Purge"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		ThreadPool.purge(); | ||||
| 		final StringBuilder sb = new StringBuilder("STATUS OF THREAD POOLS AFTER PURGE COMMAND:" + Config.EOL); | ||||
| 		for (String line : ThreadPool.getStats()) | ||||
| 		{ | ||||
| 			sb.append(line + Config.EOL); | ||||
| 		} | ||||
| 		return sb.toString(); | ||||
| 	} | ||||
| } | ||||
| @@ -1,257 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.commons.enums.ServerMode; | ||||
| import org.l2jmobius.gameserver.cache.HtmCache; | ||||
| import org.l2jmobius.gameserver.data.ItemTable; | ||||
| import org.l2jmobius.gameserver.data.sql.CrestTable; | ||||
| import org.l2jmobius.gameserver.data.xml.AdminData; | ||||
| import org.l2jmobius.gameserver.data.xml.AppearanceItemData; | ||||
| import org.l2jmobius.gameserver.data.xml.ArmorSetData; | ||||
| import org.l2jmobius.gameserver.data.xml.BuyListData; | ||||
| import org.l2jmobius.gameserver.data.xml.DoorData; | ||||
| import org.l2jmobius.gameserver.data.xml.EnchantItemData; | ||||
| import org.l2jmobius.gameserver.data.xml.EnchantItemGroupsData; | ||||
| import org.l2jmobius.gameserver.data.xml.ItemCrystallizationData; | ||||
| import org.l2jmobius.gameserver.data.xml.MultisellData; | ||||
| import org.l2jmobius.gameserver.data.xml.NpcData; | ||||
| import org.l2jmobius.gameserver.data.xml.SayuneData; | ||||
| import org.l2jmobius.gameserver.data.xml.SkillData; | ||||
| import org.l2jmobius.gameserver.data.xml.TeleporterData; | ||||
| import org.l2jmobius.gameserver.data.xml.TransformData; | ||||
| import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.QuestManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.WalkingManager; | ||||
| import org.l2jmobius.gameserver.instancemanager.ZoneManager; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.scripting.ScriptEngineManager; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Reload implements ITelnetCommand | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(Reload.class.getName()); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "reload"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Reload <zone/multisell/teleport/skill/npc/htm/item/config/npcwalkers/access/quests/door/primeshop/html/script>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || args[0].isEmpty()) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		switch (args[0]) | ||||
| 		{ | ||||
| 			case "config": | ||||
| 			{ | ||||
| 				Config.load(ServerMode.GAME); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Configs."); | ||||
| 			} | ||||
| 			case "access": | ||||
| 			{ | ||||
| 				AdminData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Access."); | ||||
| 			} | ||||
| 			case "npc": | ||||
| 			{ | ||||
| 				NpcData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Npcs."); | ||||
| 			} | ||||
| 			case "quest": | ||||
| 			{ | ||||
| 				if (args.length > 1) | ||||
| 				{ | ||||
| 					final String value = args[1]; | ||||
| 					if (!Util.isDigit(value)) | ||||
| 					{ | ||||
| 						QuestManager.getInstance().reload(value); | ||||
| 						return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Quest Name:" + value + "."); | ||||
| 					} | ||||
| 					final int questId = Integer.parseInt(value); | ||||
| 					QuestManager.getInstance().reload(questId); | ||||
| 					return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Quest ID:" + questId + "."); | ||||
| 				} | ||||
| 				QuestManager.getInstance().reloadAllScripts(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Quests."); | ||||
| 			} | ||||
| 			case "walker": | ||||
| 			{ | ||||
| 				WalkingManager.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Walkers."); | ||||
| 			} | ||||
| 			case "htm": | ||||
| 			case "html": | ||||
| 			{ | ||||
| 				if (args.length > 1) | ||||
| 				{ | ||||
| 					final String path = args[1]; | ||||
| 					final File file = new File(Config.DATAPACK_ROOT, "data/html/" + path); | ||||
| 					if (file.exists()) | ||||
| 					{ | ||||
| 						HtmCache.getInstance().reload(file); | ||||
| 						return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Htm File:" + file.getName() + "."); | ||||
| 					} | ||||
| 					return "File or Directory does not exist."; | ||||
| 				} | ||||
| 				HtmCache.getInstance().reload(); | ||||
| 				AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Htms."); | ||||
| 				return "Cache[HTML]: " + HtmCache.getInstance().getMemoryUsage() + " megabytes on " + HtmCache.getInstance().getLoadedFiles() + " files loaded"; | ||||
| 			} | ||||
| 			case "multisell": | ||||
| 			{ | ||||
| 				MultisellData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Multisells."); | ||||
| 			} | ||||
| 			case "buylist": | ||||
| 			{ | ||||
| 				BuyListData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Buylists."); | ||||
| 			} | ||||
| 			case "teleport": | ||||
| 			{ | ||||
| 				TeleporterData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Teleports."); | ||||
| 			} | ||||
| 			case "skill": | ||||
| 			{ | ||||
| 				SkillData.getInstance().reload(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Skills."); | ||||
| 			} | ||||
| 			case "item": | ||||
| 			{ | ||||
| 				ItemTable.getInstance().reload(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Items."); | ||||
| 			} | ||||
| 			case "door": | ||||
| 			{ | ||||
| 				DoorData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Doors."); | ||||
| 			} | ||||
| 			case "zone": | ||||
| 			{ | ||||
| 				ZoneManager.getInstance().reload(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Zones."); | ||||
| 			} | ||||
| 			case "cw": | ||||
| 			{ | ||||
| 				CursedWeaponsManager.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Cursed Weapons."); | ||||
| 			} | ||||
| 			case "crest": | ||||
| 			{ | ||||
| 				CrestTable.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Crests."); | ||||
| 			} | ||||
| 			case "effect": | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					ScriptEngineManager.getInstance().executeScript(ScriptEngineManager.EFFECT_MASTER_HANDLER_FILE); | ||||
| 					return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded effect master handler."); | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					LOGGER.log(Level.WARNING, "Failed executing effect master handler!", e); | ||||
| 					return "Error reloading effect master handler: " + e.getMessage(); | ||||
| 				} | ||||
| 			} | ||||
| 			case "handler": | ||||
| 			{ | ||||
| 				try | ||||
| 				{ | ||||
| 					ScriptEngineManager.getInstance().executeScript(ScriptEngineManager.MASTER_HANDLER_FILE); | ||||
| 					return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded master handler."); | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					LOGGER.log(Level.WARNING, "Failed executing master handler!", e); | ||||
| 					return "Error reloading master handler: " + e.getMessage(); | ||||
| 				} | ||||
| 			} | ||||
| 			case "enchant": | ||||
| 			{ | ||||
| 				EnchantItemGroupsData.getInstance().load(); | ||||
| 				EnchantItemData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded item enchanting data."); | ||||
| 			} | ||||
| 			case "transform": | ||||
| 			{ | ||||
| 				TransformData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded transform data."); | ||||
| 			} | ||||
| 			case "crystalizable": | ||||
| 			{ | ||||
| 				ItemCrystallizationData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded item crystalization data."); | ||||
| 			} | ||||
| 			case "appearance": | ||||
| 			{ | ||||
| 				AppearanceItemData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded appearance item data."); | ||||
| 			} | ||||
| 			case "sayune": | ||||
| 			{ | ||||
| 				SayuneData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Sayune data."); | ||||
| 			} | ||||
| 			case "sets": | ||||
| 			{ | ||||
| 				ArmorSetData.getInstance().load(); | ||||
| 				return AdminData.getInstance().broadcastMessageToGMs("Telnet Admin: Reloaded Armor sets data."); | ||||
| 			} | ||||
| 			case "script": | ||||
| 			{ | ||||
| 				if (args.length < 2) | ||||
| 				{ | ||||
| 					return "Syntax: reload script <path>"; | ||||
| 				} | ||||
| 				try | ||||
| 				{ | ||||
| 					ScriptEngineManager.getInstance().executeScript(Paths.get(args[1])); | ||||
| 					return "Script " + args[1] + " has been reloaded successfuly."; | ||||
| 				} | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					return "Couldn't reload script: " + args[1] + " err: " + e.getMessage(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| } | ||||
| @@ -1,47 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.gameserver.Shutdown; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class ServerAbort implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "abort"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Abort"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		Shutdown.getInstance().abort(null); | ||||
| 		return "Server shutdown/restart aborted!"; | ||||
| 	} | ||||
| } | ||||
| @@ -1,53 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.gameserver.Shutdown; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class ServerRestart implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "restart"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Restart <time in seconds>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || !Util.isDigit(args[0])) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int time = Integer.parseInt(args[0]); | ||||
| 		Shutdown.getInstance().startShutdown(null, time, true); | ||||
| 		return "Server will restart in " + time + " seconds!"; | ||||
| 	} | ||||
| } | ||||
| @@ -1,53 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.gameserver.Shutdown; | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
| import org.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class ServerShutdown implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "shutdown"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Shutdown <time in seconds>"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		if ((args.length == 0) || !Util.isDigit(args[0])) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 		final int time = Integer.parseInt(args[0]); | ||||
| 		Shutdown.getInstance().startShutdown(null, time, false); | ||||
| 		return "Server will shutdown in " + time + " seconds!"; | ||||
| 	} | ||||
| } | ||||
| @@ -1,45 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.telnethandlers.server; | ||||
|  | ||||
| import org.l2jmobius.gameserver.network.telnet.ITelnetCommand; | ||||
|  | ||||
| import io.netty.channel.ChannelHandlerContext; | ||||
|  | ||||
| /** | ||||
|  * @author UnAfraid | ||||
|  */ | ||||
| public class Status implements ITelnetCommand | ||||
| { | ||||
| 	@Override | ||||
| 	public String getCommand() | ||||
| 	{ | ||||
| 		return "status"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String getUsage() | ||||
| 	{ | ||||
| 		return "Status"; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String handle(ChannelHandlerContext ctx, String[] args) | ||||
| 	{ | ||||
| 		return Debug.getServerStatus(); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment