/* * 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 . */ package handlers.admincommandhandlers; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.NoSuchElementException; import java.util.StringTokenizer; import java.util.logging.Logger; import com.l2jserver.Config; import com.l2jserver.commons.database.pool.impl.ConnectionFactory; import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.datatables.SpawnTable; import com.l2jserver.gameserver.handler.IAdminCommandHandler; import com.l2jserver.gameserver.instancemanager.MapRegionManager; import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.L2Spawn; import com.l2jserver.gameserver.model.L2World; import com.l2jserver.gameserver.model.Location; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2RaidBossInstance; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jserver.util.StringUtil; /** * This class handles following admin commands: - show_moves - show_teleport - teleport_to_character - move_to - teleport_character * @version $Revision: 1.3.2.6.2.4 $ $Date: 2005/04/11 10:06:06 $ con.close() change and small typo fix by Zoey76 24/02/2011 */ public class AdminTeleport implements IAdminCommandHandler { private static final Logger _log = Logger.getLogger(AdminTeleport.class.getName()); private static final String[] ADMIN_COMMANDS = { "admin_show_moves", "admin_show_moves_other", "admin_show_teleport", "admin_teleport_to_character", "admin_teleportto", "admin_move_to", "admin_teleport_character", "admin_recall", "admin_walk", "teleportto", "recall", "admin_recall_npc", "admin_gonorth", "admin_gosouth", "admin_goeast", "admin_gowest", "admin_goup", "admin_godown", "admin_tele", "admin_teleto", "admin_instant_move", "admin_sendhome" }; @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { if (command.equals("admin_teleto")) { activeChar.setTeleMode(1); } if (command.equals("admin_instant_move")) { activeChar.sendMessage("Instant move ready. Click where you want to go."); activeChar.setTeleMode(1); } if (command.equals("admin_teleto r")) { activeChar.setTeleMode(2); } if (command.equals("admin_teleto end")) { activeChar.setTeleMode(0); } if (command.equals("admin_show_moves")) { AdminHtml.showAdminHtml(activeChar, "teleports.htm"); } if (command.equals("admin_show_moves_other")) { AdminHtml.showAdminHtml(activeChar, "tele/other.html"); } else if (command.equals("admin_show_teleport")) { showTeleportCharWindow(activeChar); } else if (command.equals("admin_recall_npc")) { recallNPC(activeChar); } else if (command.equals("admin_teleport_to_character")) { teleportToCharacter(activeChar, activeChar.getTarget()); } else if (command.startsWith("admin_walk")) { try { String val = command.substring(11); StringTokenizer st = new StringTokenizer(val); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); int z = Integer.parseInt(st.nextToken()); activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(x, y, z, 0)); } catch (Exception e) { if (Config.DEBUG) { _log.info("admin_walk: " + e); } } } else if (command.startsWith("admin_move_to")) { try { String val = command.substring(14); teleportTo(activeChar, val); } catch (StringIndexOutOfBoundsException e) { // Case of empty or missing coordinates AdminHtml.showAdminHtml(activeChar, "teleports.htm"); } catch (NumberFormatException nfe) { activeChar.sendMessage("Usage: //move_to "); AdminHtml.showAdminHtml(activeChar, "teleports.htm"); } } else if (command.startsWith("admin_teleport_character")) { try { String val = command.substring(25); teleportCharacter(activeChar, val); } catch (StringIndexOutOfBoundsException e) { // Case of empty coordinates activeChar.sendMessage("Wrong or no Coordinates given."); showTeleportCharWindow(activeChar); // back to character teleport } } else if (command.startsWith("admin_teleportto ")) { try { String targetName = command.substring(17); L2PcInstance player = L2World.getInstance().getPlayer(targetName); teleportToCharacter(activeChar, player); } catch (StringIndexOutOfBoundsException e) { } } else if (command.startsWith("admin_recall ")) { try { String[] param = command.split(" "); if (param.length != 2) { activeChar.sendMessage("Usage: //recall "); return false; } String targetName = param[1]; L2PcInstance player = L2World.getInstance().getPlayer(targetName); if (player != null) { teleportCharacter(player, activeChar.getLocation(), activeChar); } else { changeCharacterPosition(activeChar, targetName); } } catch (StringIndexOutOfBoundsException e) { } } else if (command.equals("admin_tele")) { showTeleportWindow(activeChar); } else if (command.startsWith("admin_go")) { int intVal = 150; int x = activeChar.getX(), y = activeChar.getY(), z = activeChar.getZ(); try { String val = command.substring(8); StringTokenizer st = new StringTokenizer(val); String dir = st.nextToken(); if (st.hasMoreTokens()) { intVal = Integer.parseInt(st.nextToken()); } if (dir.equals("east")) { x += intVal; } else if (dir.equals("west")) { x -= intVal; } else if (dir.equals("north")) { y -= intVal; } else if (dir.equals("south")) { y += intVal; } else if (dir.equals("up")) { z += intVal; } else if (dir.equals("down")) { z -= intVal; } activeChar.teleToLocation(new Location(x, y, z)); showTeleportWindow(activeChar); } catch (Exception e) { activeChar.sendMessage("Usage: //go [offset] (default 150)"); } } else if (command.startsWith("admin_sendhome")) { StringTokenizer st = new StringTokenizer(command, " "); st.nextToken(); // Skip command. if (st.countTokens() > 1) { activeChar.sendMessage("Usage: //sendhome "); } else if (st.countTokens() == 1) { final String name = st.nextToken(); final L2PcInstance player = L2World.getInstance().getPlayer(name); if (player == null) { activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME); return false; } teleportHome(player); } else { final L2Object target = activeChar.getTarget(); if (target instanceof L2PcInstance) { teleportHome(target.getActingPlayer()); } else { activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET); } } } return true; } @Override public String[] getAdminCommandList() { return ADMIN_COMMANDS; } /** * This method sends a player to it's home town. * @param player the player to teleport. */ private void teleportHome(L2PcInstance player) { String regionName; switch (player.getRace()) { case ELF: regionName = "elf_town"; break; case DARK_ELF: regionName = "darkelf_town"; break; case ORC: regionName = "orc_town"; break; case DWARF: regionName = "dwarf_town"; break; case KAMAEL: regionName = "kamael_town"; break; case HUMAN: default: regionName = "talking_island_town"; } player.teleToLocation(MapRegionManager.getInstance().getMapRegionByName(regionName).getSpawnLoc(), true); player.setInstanceId(0); player.setIsIn7sDungeon(false); } private void teleportTo(L2PcInstance activeChar, String Coords) { try { StringTokenizer st = new StringTokenizer(Coords); String x1 = st.nextToken(); int x = Integer.parseInt(x1); String y1 = st.nextToken(); int y = Integer.parseInt(y1); String z1 = st.nextToken(); int z = Integer.parseInt(z1); activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); activeChar.teleToLocation(x, y, z); activeChar.sendMessage("You have been teleported to " + Coords); } catch (NoSuchElementException nsee) { activeChar.sendMessage("Wrong or no Coordinates given."); } } private void showTeleportWindow(L2PcInstance activeChar) { AdminHtml.showAdminHtml(activeChar, "move.htm"); } private void showTeleportCharWindow(L2PcInstance activeChar) { L2Object target = activeChar.getTarget(); L2PcInstance player = null; if (target instanceof L2PcInstance) { player = (L2PcInstance) target; } else { activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET); return; } final NpcHtmlMessage adminReply = new NpcHtmlMessage(); final String replyMSG = StringUtil.concat("Teleport Character" + "" + "The character you will teleport is ", player.getName(), "." + "
" + "Co-ordinate x" + "" + "Co-ordinate y" + "" + "Co-ordinate z" + "" + "