l2j_mobius/trunk/dist/game/data/scripts/handlers/telnethandlers/PlayerHandler.java
2015-01-24 20:02:32 +00:00

341 lines
9.8 KiB
Java

/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import com.l2jserver.Config;
import com.l2jserver.gameserver.data.sql.impl.CharNameTable;
import com.l2jserver.gameserver.handler.ITelnetHandler;
import com.l2jserver.gameserver.instancemanager.PunishmentManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.punishment.PunishmentAffect;
import com.l2jserver.gameserver.model.punishment.PunishmentTask;
import com.l2jserver.gameserver.model.punishment.PunishmentType;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.CharInfo;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;
import com.l2jserver.gameserver.util.GMAudit;
import com.l2jserver.gameserver.util.Util;
/**
* @author UnAfraid
*/
public class PlayerHandler implements ITelnetHandler
{
private final String[] _commands =
{
"kick",
"give",
"enchant",
"jail",
"unjail"
};
@Override
public boolean useCommand(String command, PrintWriter _print, Socket _cSocket, int _uptime)
{
if (command.startsWith("kick"))
{
try
{
command = command.substring(5);
L2PcInstance player = L2World.getInstance().getPlayer(command);
if (player != null)
{
player.sendMessage("You are kicked by gm");
player.logout();
_print.println("Player kicked");
}
}
catch (StringIndexOutOfBoundsException e)
{
_print.println("Please enter player name to kick");
}
}
else if (command.startsWith("give"))
{
StringTokenizer st = new StringTokenizer(command.substring(5));
try
{
L2PcInstance player = L2World.getInstance().getPlayer(st.nextToken());
int itemId = Integer.parseInt(st.nextToken());
int amount = Integer.parseInt(st.nextToken());
if (player != null)
{
L2ItemInstance item = player.getInventory().addItem("Status-Give", itemId, amount, null, null);
InventoryUpdate iu = new InventoryUpdate();
iu.addItem(item);
player.sendPacket(iu);
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S2_S1);
sm.addItemName(itemId);
sm.addLong(amount);
player.sendPacket(sm);
_print.println("ok");
GMAudit.auditGMAction("Telnet Admin", "Give Item", player.getName(), "item: " + itemId + " amount: " + amount);
}
else
{
_print.println("Player not found");
}
}
catch (Exception e)
{
}
}
else if (command.startsWith("enchant"))
{
StringTokenizer st = new StringTokenizer(command.substring(8), " ");
int enchant = 0, itemType = 0;
try
{
L2PcInstance player = L2World.getInstance().getPlayer(st.nextToken());
itemType = Integer.parseInt(st.nextToken());
enchant = Integer.parseInt(st.nextToken());
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;
}
if (enchant > 65535)
{
enchant = 65535;
}
else if (enchant < 0)
{
enchant = 0;
}
boolean success = false;
if ((player != null) && (itemType > 0))
{
success = setEnchant(player, enchant, itemType);
if (success)
{
_print.println("Item enchanted successfully.");
}
}
else if (!success)
{
_print.println("Item failed to enchant.");
}
}
catch (Exception e)
{
}
}
else if (command.startsWith("jail"))
{
StringTokenizer st = new StringTokenizer(command.substring(5));
try
{
String name = st.nextToken();
int charId = CharNameTable.getInstance().getIdByName(name);
int delay = 0;
String reason = "";
if (st.hasMoreTokens())
{
String token = st.nextToken();
if (Util.isDigit(token))
{
delay = Integer.parseInt(token);
}
while (st.hasMoreTokens())
{
reason += st.nextToken() + " ";
}
if (!reason.isEmpty())
{
reason = reason.substring(0, reason.length() - 1);
}
}
if (charId > 0)
{
long expirationTime = delay > 0 ? System.currentTimeMillis() + (delay * 60 * 1000) : -1;
PunishmentManager.getInstance().startPunishment(new PunishmentTask(charId, PunishmentAffect.CHARACTER, PunishmentType.JAIL, expirationTime, reason, "Telnet Admin: " + _cSocket.getInetAddress().getHostAddress()));
_print.println("Character " + name + " jailed for " + (delay > 0 ? delay + " minutes." : "ever!"));
}
else
{
_print.println("Character with name: " + name + " was not found!");
}
}
catch (NoSuchElementException nsee)
{
_print.println("Specify a character name.");
}
catch (Exception e)
{
if (Config.DEBUG)
{
e.printStackTrace();
}
}
}
else if (command.startsWith("unjail"))
{
StringTokenizer st = new StringTokenizer(command.substring(7));
try
{
String name = st.nextToken();
int charId = CharNameTable.getInstance().getIdByName(name);
if (charId > 0)
{
PunishmentManager.getInstance().stopPunishment(charId, PunishmentAffect.CHARACTER, PunishmentType.JAIL);
_print.println("Character " + name + " have been unjailed");
}
else
{
_print.println("Character with name: " + name + " was not found!");
}
}
catch (NoSuchElementException nsee)
{
_print.println("Specify a character name.");
}
catch (Exception e)
{
if (Config.DEBUG)
{
e.printStackTrace();
}
}
}
return false;
}
private boolean setEnchant(L2PcInstance activeChar, int ench, int armorType)
{
// now we need to find the equipped weapon of the targeted character...
int curEnchant = 0; // display purposes only
L2ItemInstance itemInstance = null;
// only attempt to enchant if there is a weapon equipped
L2ItemInstance parmorInstance = activeChar.getInventory().getPaperdollItem(armorType);
if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == armorType))
{
itemInstance = parmorInstance;
}
else
{
// for bows/crossbows and double handed weapons
parmorInstance = activeChar.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == Inventory.PAPERDOLL_RHAND))
{
itemInstance = parmorInstance;
}
}
if (itemInstance != null)
{
curEnchant = itemInstance.getEnchantLevel();
// set enchant value
activeChar.getInventory().unEquipItemInSlot(armorType);
itemInstance.setEnchantLevel(ench);
activeChar.getInventory().equipItem(itemInstance);
// send packets
InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(itemInstance);
activeChar.sendPacket(iu);
activeChar.broadcastPacket(new CharInfo(activeChar));
activeChar.sendPacket(new UserInfo(activeChar));
// informations
activeChar.sendMessage("Changed enchantment of " + activeChar.getName() + "'s " + itemInstance.getItem().getName() + " from " + curEnchant + " to " + ench + ".");
activeChar.sendMessage("Admin has changed the enchantment of your " + itemInstance.getItem().getName() + " from " + curEnchant + " to " + ench + ".");
// log
GMAudit.auditGMAction("TelnetAdministrator", "enchant", activeChar.getName(), itemInstance.getItem().getName() + "(" + itemInstance.getObjectId() + ")" + " from " + curEnchant + " to " + ench);
return true;
}
return false;
}
@Override
public String[] getCommandList()
{
return _commands;
}
}