Package com.l2jfrozen.gameserver.handler.admincommandhandlers

Source Code of com.l2jfrozen.gameserver.handler.admincommandhandlers.AdminTeleport

/*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.handler.admincommandhandlers;

import java.util.StringTokenizer;
import java.util.logging.Logger;

import javolution.text.TextBuilder;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable;
import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
import com.l2jfrozen.gameserver.handler.IAdminCommandHandler;
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.model.Location;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.position.L2CharPosition;
import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;

/**
* 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 $
*/
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",
      "admin_recall_npc",
      "admin_gonorth",
      "admin_gosouth",
      "admin_goeast",
      "admin_gowest",
      "admin_goup",
      "admin_godown",
      "admin_instant_move",
      "admin_sendhome",
      "admin_tele",
      "admin_teleto",
      "admin_recall_party",
  };

  private enum CommandEnum
  {
    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,
    admin_recall_npc,
    admin_gonorth,
    admin_gosouth,
    admin_goeast,
    admin_gowest,
    admin_goup,
    admin_godown,
    admin_instant_move,
    admin_sendhome,
    admin_tele,
    admin_teleto,
    admin_recall_party
  }

  @Override
  public boolean useAdminCommand(String command, L2PcInstance activeChar)
  {
    StringTokenizer st = new StringTokenizer(command);
    CommandEnum comm = CommandEnum.valueOf(st.nextToken());   
    //Alt+g window (instant move)
    if (command.equals("admin_instant_move"))
      {
        activeChar.setTeleMode(1);
      }
    //Send player to town (alt+g)
    else if (command.startsWith("admin_sendhome"))
                     {
                         try
                         {
                             String[] param = command.split(" ");
                             if (param.length != 2)
                             {
                                 activeChar.sendMessage("Usage: //sendhome <playername>");
                                 return false;
                             }
                             String targetName = param[1];
                           L2PcInstance player = L2World.getInstance().getPlayer(targetName);
                           if (player != null)
                             {
                                 Location loc = MapRegionTable.getInstance().getTeleToLocation(player, MapRegionTable.TeleportWhereType.Town);
                               player.setInstanceId(0);
                                 player.teleToLocation(loc, true);
                             }
                             else
                                 activeChar.sendMessage("User is not online.");
                         }
                         catch (StringIndexOutOfBoundsException e)
                         {
          }
       }
    else if(comm == null)
      return false;
   
    switch(comm)
    {
      case admin_show_moves:{
        AdminHelpPage.showHelpPage(activeChar, "teleports.htm");
        return true;
      }
      case admin_show_moves_other:{
        AdminHelpPage.showHelpPage(activeChar, "tele/other.html");
        return true;
      }
      case admin_show_teleport:{
        showTeleportCharWindow(activeChar);
        return true;
      }
      case admin_teleport_to_character:{
        teleportToCharacter(activeChar, activeChar.getTarget());
        return true;
      }
      case admin_teleportto:{
       
        String val = "";
       
        if(st.hasMoreTokens()){
         
          val = st.nextToken();
         
        }else{
          activeChar.sendMessage("Usage: //teleportto <char_name>");
          return false;
        }
       
        L2PcInstance player = L2World.getInstance().getPlayer(val);
       
        if(player==null){
          activeChar.sendMessage("ATTENTION: char_name must be valid character");
          activeChar.sendMessage("Usage: //teleportto <char_name>");
          return false;
        }
       
        teleportToCharacter(activeChar, player);
        val = null;
        player = null;
        return true;
       
      }
      case admin_recall_party:{
     
        if (activeChar.isGM() && !(activeChar.getAccessLevel().getLevel() == 1))
        {return false;}
       
        String val = "";
       
        if(st.hasMoreTokens()){
         
          val = st.nextToken();
         
        }else{
          activeChar.sendMessage("Usage: //recall_party <party_leader_name>");
          return false;
        }
       
        if(val.equals("")){
          activeChar.sendMessage("Usage: //recall_party <party_leader_name>");
          return false;
        }

        L2PcInstance player = L2World.getInstance().getPlayer(val)
       
        if(player==null){
          activeChar.sendMessage("ATTENTION: party_leader_name must be valid character");
          activeChar.sendMessage("//recall_party <party_leader_name>");
          return false;
        }
       
        if(player.getParty() == null){
          activeChar.sendMessage("The player must have a party");
          activeChar.sendMessage("//recall_party <party_leader_name>");
          return false;
        }

        if(!player.getParty().isLeader(player)){
          activeChar.sendMessage("The player must be the party_leader");
          activeChar.sendMessage("//recall_party <party_leader_name>");
          return false;
        }       
       
        for(L2PcInstance partyMember : player.getParty().getPartyMembers())
        {         
          partyMember.sendMessage("You party teleported by Admin.");
          teleportTo(partyMember, activeChar.getX(), activeChar.getY(), activeChar.getZ());        
        }
        return true;
   
      }
      case admin_move_to:{
       
        int x = 0;
        int y = 0;
        int z = 0;
       
       
        if(st.countTokens()==3){
         
          try{
           
            String x_str = st.nextToken();
            String y_str = st.nextToken();
            String z_str = st.nextToken();
           
            x = Integer.parseInt(x_str);
            y = Integer.parseInt(y_str);
            z = Integer.parseInt(z_str);
           
          }catch(NumberFormatException e){
            activeChar.sendMessage("Usage: //move_to <coordinates>");
            AdminHelpPage.showHelpPage(activeChar, "teleports.htm");
            return false;
          }
         
        }else{
          activeChar.sendMessage("Usage: //move_to <coordinates>");
          AdminHelpPage.showHelpPage(activeChar, "teleports.htm");
          return false;
        }
       
        if(x == 0 && y == 0){
          activeChar.sendMessage("Usage: //move_to <valid_coordinates>");
          AdminHelpPage.showHelpPage(activeChar, "teleports.htm");
          return false;
        }
       
        teleportTo(activeChar, x,y,z);
        return true;
       
      }
      case admin_teleport_character:{
       
        int x = 0;
        int y = 0;
        int z = 0;
       
        if(st.countTokens()==3){
         
          try{
           
            String x_str = st.nextToken();
            String y_str = st.nextToken();
            String z_str = st.nextToken();
           
            x = Integer.parseInt(x_str);
            y = Integer.parseInt(y_str);
            z = Integer.parseInt(z_str);
           
          }catch(NumberFormatException e){
            activeChar.sendMessage("Usage: //teleport_character <coordinates>");
            showTeleportCharWindow(activeChar);
            return false;
          }
         
        }else{
          activeChar.sendMessage("Usage: //teleport_character <coordinates>");
          showTeleportCharWindow(activeChar);
          return false;
        }
       
        if(x == 0 && y == 0){
          activeChar.sendMessage("Usage: //teleport_character <valid_coordinates>");
          showTeleportCharWindow(activeChar);
          return false;
        }
       
        L2Object target = null;
        L2PcInstance player = null;
       
        if((target = activeChar.getTarget()) != null && target instanceof L2PcInstance){
         
          player = (L2PcInstance) target ;
         
        }
       
        if(player==null){
          activeChar.sendMessage("Select valid player");
          activeChar.sendMessage("Usage: //teleport_character <valid_coordinates>");
          showTeleportCharWindow(activeChar);
          return false;
        }
       
        teleportTo(player, x,y,z);
        return true;
       
      }
      case admin_recall:{
       
        String val = "";
       
        if(st.hasMoreTokens()){
         
          val = st.nextToken();
         
        }else{
          activeChar.sendMessage("Usage: //recall <char_name>");
          return false;
        }
       
        if(val.equals("")){
          activeChar.sendMessage("Usage: //recall <char_name>");
          return false;
        }
       
        L2PcInstance player = L2World.getInstance().getPlayer(val);
       
        if(player==null){
          activeChar.sendMessage("ATTENTION: char_name must be valid character");
          activeChar.sendMessage("Usage: //recall <char_name>");
          return false;
        }
       
        teleportTo(player, activeChar.getX(), activeChar.getY(), activeChar.getZ());
        return true;
       
      }
      case admin_walk:{
       
        int x = 0;
        int y = 0;
        int z = 0;
       
        if(st.countTokens()==3){
         
          try{
           
            String x_str = st.nextToken();
            String y_str = st.nextToken();
            String z_str = st.nextToken();
           
            x = Integer.parseInt(x_str);
            y = Integer.parseInt(y_str);
            z = Integer.parseInt(z_str);
           
          }catch(NumberFormatException e){
            activeChar.sendMessage("Usage: //walk <coordinates>");
            return false;
          }
         
        }else{
          activeChar.sendMessage("Usage: //walk <coordinates>");
          return false;
        }
       
        if(x == 0 && y == 0){
          activeChar.sendMessage("Usage: //walk <valid_coordinates>");
          return false;
        }
       
        L2CharPosition pos = new L2CharPosition(x, y, z, 0);
        activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, pos);
        return true;
       
      }
      case admin_recall_npc:{
        recallNPC(activeChar);
      }
      break;
      case admin_gonorth:
      case admin_gosouth:
      case admin_goeast:
      case admin_gowest:
      case admin_goup:
      case admin_godown:{
       
        int intVal = 150;
        int x = activeChar.getX(), y = activeChar.getY(), z = activeChar.getZ();

        try
        {
          String val = command.substring(8);
          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(x, y, z, false);
          showTeleportWindow(activeChar);

          dir = null;
          st = null;
          val = null;
         
          return true;
        }
        catch(Exception e)
        {
          activeChar.sendMessage("Usage: //go<north|south|east|west|up|down> [offset] (default 150)");
          return false;
        }
      }
      case admin_tele:{
        showTeleportWindow(activeChar);
      }
      break;
      case admin_teleto:{
       
        String val = "";
       
        if(st.hasMoreTokens()){
         
          val = st.nextToken();
         
        }

        if(val.equals("")){
          activeChar.setTeleMode(1);
        }else if(val.equals("r")){
          activeChar.setTeleMode(2);
        }else if(val.equals("end")){
          activeChar.setTeleMode(0);
        }else{
          activeChar.sendMessage("Defined mode not allowed..");
          return false;
        }
       
        return true;
       
      }
   
    }

    return false;
  }

  @Override
  public String[] getAdminCommandList()
  {
    return ADMIN_COMMANDS;
  }

  private void teleportTo(L2PcInstance activeChar, int x, int y, int z)
  //private void teleportTo(L2PcInstance activeChar, String Cords)
  {
   
    activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
    activeChar.teleToLocation(x, y, z, false);

    SystemMessage sm = new SystemMessage(SystemMessageId.S1_S2);
    sm.addString("You have been teleported to " + x+" "+y+" "+z);
    activeChar.sendPacket(sm);

    sm = null;
   
  }

  private void showTeleportWindow(L2PcInstance activeChar)
  {
    AdminHelpPage.showHelpPage(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(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
      return;
    }

    NpcHtmlMessage adminReply = new NpcHtmlMessage(5);

    TextBuilder replyMSG = new TextBuilder("<html><title>Teleport Character</title>");
    replyMSG.append("<body>");
    replyMSG.append("The character you will teleport is " + player.getName() + ".");
    replyMSG.append("<br>");
    replyMSG.append("Co-ordinate x");
    replyMSG.append("<edit var=\"char_cord_x\" width=110>");
    replyMSG.append("Co-ordinate y");
    replyMSG.append("<edit var=\"char_cord_y\" width=110>");
    replyMSG.append("Co-ordinate z");
    replyMSG.append("<edit var=\"char_cord_z\" width=110>");
    replyMSG.append("<button value=\"Teleport\" action=\"bypass -h admin_teleport_character $char_cord_x $char_cord_y $char_cord_z\" width=60 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\">");
    replyMSG.append("<button value=\"Teleport near you\" action=\"bypass -h admin_teleport_character " + activeChar.getX() + " " + activeChar.getY() + " " + activeChar.getZ() + "\" width=115 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\">");
    replyMSG.append("<center><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></center>");
    replyMSG.append("</body></html>");

    adminReply.setHtml(replyMSG.toString());
    activeChar.sendPacket(adminReply);

    adminReply = null;
    replyMSG = null;
    player = null;
    target = null;
  }

  private void teleportToCharacter(L2PcInstance activeChar, L2Object target)
  {
    L2PcInstance player = null;
    //L2NpcInstance npc = null;
   
    if(target != null && target instanceof L2PcInstance)
    {
      player = (L2PcInstance) target;
    }/*else if(target != null && target instanceof L2NpcInstance){
      npc = (L2NpcInstance) target;
    }*/else
    {
      activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
      return;
    }

    if(player.getObjectId() == activeChar.getObjectId())
    {
      player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
    }
    else
    {
      int x = player.getX();
      int y = player.getY();
      int z = player.getZ();

      activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
      activeChar.teleToLocation(x, y, z, true);

      activeChar.sendMessage("You have teleported to character " + player.getName() + ".");
    }/*
    else if(npc!=null)
    {
      int x = npc.getX();
      int y = npc.getY();
      int z = npc.getZ();

      activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
      activeChar.teleToLocation(x, y, z, true);

      activeChar.sendMessage("You have teleported to npc " + npc.getName() + ".");
    }*/
  }

  private void recallNPC(L2PcInstance activeChar)
  {
    L2Object obj = activeChar.getTarget();

    if(obj != null && obj instanceof L2NpcInstance)
    {
      L2NpcInstance target = (L2NpcInstance) obj;

      int monsterTemplate = target.getTemplate().npcId;

      L2NpcTemplate template1 = NpcTable.getInstance().getTemplate(monsterTemplate);

      if(template1 == null)
      {
        activeChar.sendMessage("Incorrect monster template.");
        _log.warning("ERROR: NPC " + target.getObjectId() + " has a 'null' template.");
        return;
      }

      L2Spawn spawn = target.getSpawn();

      if(spawn == null)
      {
        activeChar.sendMessage("Incorrect monster spawn.");
        _log.warning("ERROR: NPC " + target.getObjectId() + " has a 'null' spawn.");
        return;
      }

      int respawnTime = spawn.getRespawnDelay()/1000;
      boolean custom_boss_spawn = spawn.is_customBossInstance();
       
      target.deleteMe();
      spawn.stopRespawn();
     
      //check to avoid that recalling a custom raid it will be saved into database
      SpawnTable.getInstance().deleteSpawn(spawn, !custom_boss_spawn);

      try
      {
        //L2MonsterInstance mob = new L2MonsterInstance(monsterTemplate, template1);

        spawn = new L2Spawn(template1);
        spawn.setLocx(activeChar.getX());
        spawn.setLocy(activeChar.getY());
        spawn.setLocz(activeChar.getZ());
        spawn.setAmount(1);
        spawn.setHeading(activeChar.getHeading());
        spawn.setRespawnDelay(respawnTime);
        SpawnTable.getInstance().addNewSpawn(spawn, !custom_boss_spawn);
        spawn.init();

        SystemMessage sm = new SystemMessage(SystemMessageId.S1_S2);
        sm.addString("Created " + template1.name + " on " + target.getObjectId() + ".");
        activeChar.sendPacket(sm);
        sm = null;

        if(Config.DEBUG)
        {
          _log.fine("Spawn at X=" + spawn.getLocx() + " Y=" + spawn.getLocy() + " Z=" + spawn.getLocz());
          _log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") moved NPC " + target.getObjectId());
        }

        spawn = null;
        template1 = null;
        target = null;
      }
      catch(Exception e)
      {
        if(Config.ENABLE_ALL_EXCEPTIONS)
          e.printStackTrace();
       
        activeChar.sendMessage("Target is not in game.");
      }
    }
    else
    {
      activeChar.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
    }

    obj = null;
  }
}
TOP

Related Classes of com.l2jfrozen.gameserver.handler.admincommandhandlers.AdminTeleport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.