Package com.l2jfrozen.gameserver.handler.usercommandhandlers

Source Code of com.l2jfrozen.gameserver.handler.usercommandhandlers.Mount

/*
* 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.usercommandhandlers;

import com.l2jfrozen.gameserver.datatables.SkillTable;
import com.l2jfrozen.gameserver.geo.GeoData;
import com.l2jfrozen.gameserver.handler.IUserCommandHandler;
import com.l2jfrozen.gameserver.model.Inventory;
import com.l2jfrozen.gameserver.model.L2Summon;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.Ride;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.util.Broadcast;

/**
* Support for /mount command.
*
* @author Tempy
*/
public class Mount implements IUserCommandHandler
{
  private static final int[] COMMAND_IDS =
  {
    61
  };

  /* (non-Javadoc)
   * @see com.l2jfrozen.gameserver.handler.IUserCommandHandler#useUserCommand(int, com.l2jfrozen.gameserver.model.L2PcInstance)
   */
  @Override
  public synchronized boolean useUserCommand(int id, L2PcInstance activeChar)
  {
    if(id != COMMAND_IDS[0])
      return false;

    L2Summon pet = activeChar.getPet();

    if(pet != null && pet.isMountable() && !activeChar.isMounted())
    {
      if(activeChar.isDead())
      {
        // A strider cannot be ridden when player is dead.
        SystemMessage msg = new SystemMessage(SystemMessageId.STRIDER_CANT_BE_RIDDEN_WHILE_DEAD);
        activeChar.sendPacket(msg);
        msg = null;
      }
      else if(pet.isDead())
      {
        // A dead strider cannot be ridden.
        SystemMessage msg = new SystemMessage(SystemMessageId.DEAD_STRIDER_CANT_BE_RIDDEN);
        activeChar.sendPacket(msg);
        msg = null;
      }
      else if(pet.isInCombat())
      {
        // A strider in battle cannot be ridden.
        SystemMessage msg = new SystemMessage(SystemMessageId.STRIDER_IN_BATLLE_CANT_BE_RIDDEN);
        activeChar.sendPacket(msg);
        msg = null;
      }
      else if(activeChar.isInCombat())
      {
        // A pet cannot be ridden while player is in battle.
        SystemMessage msg = new SystemMessage(SystemMessageId.STRIDER_CANT_BE_RIDDEN_WHILE_IN_BATTLE);
        activeChar.sendPacket(msg);
        msg = null;
      }
      else if(!activeChar.isInsideRadius(pet, 60, true, false))
      {
        activeChar.sendMessage("Too far away from strider to mount.");
        return false;
      }
      else if(!GeoData.getInstance().canSeeTarget(activeChar, pet))
      {
        SystemMessage msg = new SystemMessage(SystemMessageId.CANT_SEE_TARGET);
        activeChar.sendPacket(msg);
        return false;
      }
      else if(activeChar.isSitting() || activeChar.isMoving())
      {
        // A strider can be ridden only when player is standing.
        SystemMessage msg = new SystemMessage(SystemMessageId.STRIDER_CAN_BE_RIDDEN_ONLY_WHILE_STANDING);
        activeChar.sendPacket(msg);
        msg = null;
      }
      else if(!pet.isDead() && !activeChar.isMounted())
      {
        if(!activeChar.disarmWeapons())
          return false;

        Ride mount = new Ride(activeChar.getObjectId(), Ride.ACTION_MOUNT, pet.getTemplate().npcId);
        Broadcast.toSelfAndKnownPlayersInRadius(activeChar, mount, 810000/*900*/);
        activeChar.setMountType(mount.getMountType());
        activeChar.setMountObjectID(pet.getControlItemId());
        pet.unSummon(activeChar);
        mount = null;

        if(activeChar.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) != null || activeChar.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LRHAND) != null)
        {
          if(activeChar.setMountType(0))
          {
            if(activeChar.isFlying())
            {
              activeChar.removeSkill(SkillTable.getInstance().getInfo(4289, 1));
            }

            Ride dismount = new Ride(activeChar.getObjectId(), Ride.ACTION_DISMOUNT, 0);
            Broadcast.toSelfAndKnownPlayers(activeChar, dismount);
            activeChar.setMountObjectID(0);
            dismount = null;
          }
        }
      }
    }
    else if(activeChar.isRentedPet())
    {
      activeChar.stopRentPet();
    }
    else if(activeChar.isMounted())
    {
      // Dismount
      if(activeChar.setMountType(0))
      {
        if(activeChar.isFlying())
        {
          activeChar.removeSkill(SkillTable.getInstance().getInfo(4289, 1));
        }

        Ride dismount = new Ride(activeChar.getObjectId(), Ride.ACTION_DISMOUNT, 0);
        Broadcast.toSelfAndKnownPlayers(activeChar, dismount);
        activeChar.setMountObjectID(0);
        dismount = null;
      }
    }

    pet = null;
    return true;
  }

  /* (non-Javadoc)
   * @see com.l2jfrozen.gameserver.handler.IUserCommandHandler#getUserCommandList()
   */
  @Override
  public int[] getUserCommandList()
  {
    return COMMAND_IDS;
  }
}
TOP

Related Classes of com.l2jfrozen.gameserver.handler.usercommandhandlers.Mount

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.