Package lineage2.gameserver.handler.voicecommands.impl

Source Code of lineage2.gameserver.handler.voicecommands.impl.Wedding

/*
* 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 lineage2.gameserver.handler.voicecommands.impl;

import static lineage2.gameserver.model.Zone.ZoneType.no_restart;
import static lineage2.gameserver.model.Zone.ZoneType.no_summon;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import lineage2.commons.dbutils.DbUtils;
import lineage2.commons.lang.reference.HardReference;
import lineage2.commons.threading.RunnableImpl;
import lineage2.gameserver.Config;
import lineage2.gameserver.ThreadPoolManager;
import lineage2.gameserver.ai.CtrlIntention;
import lineage2.gameserver.cache.Msg;
import lineage2.gameserver.database.DatabaseFactory;
import lineage2.gameserver.handler.voicecommands.IVoicedCommandHandler;
import lineage2.gameserver.handler.voicecommands.VoicedCommandHandler;
import lineage2.gameserver.instancemanager.CoupleManager;
import lineage2.gameserver.instancemanager.ReflectionManager;
import lineage2.gameserver.listener.actor.player.OnAnswerListener;
import lineage2.gameserver.model.GameObjectsStorage;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.Skill;
import lineage2.gameserver.model.Zone;
import lineage2.gameserver.model.entity.Couple;
import lineage2.gameserver.network.serverpackets.ConfirmDlg;
import lineage2.gameserver.network.serverpackets.MagicSkillUse;
import lineage2.gameserver.network.serverpackets.SetupGauge;
import lineage2.gameserver.network.serverpackets.SystemMessage;
import lineage2.gameserver.network.serverpackets.components.CustomMessage;
import lineage2.gameserver.network.serverpackets.components.SystemMsg;
import lineage2.gameserver.skills.AbnormalEffect;
import lineage2.gameserver.tables.SkillTable;
import lineage2.gameserver.utils.Location;

import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public class Wedding implements IVoicedCommandHandler
{
  /**
   * @author Mobius
   */
  private static class CoupleAnswerListener implements OnAnswerListener
  {
    /**
     * Field _playerRef1.
     */
    private final HardReference<Player> _playerRef1;
    /**
     * Field _playerRef2.
     */
    private final HardReference<Player> _playerRef2;
   
    /**
     * Constructor for CoupleAnswerListener.
     * @param player1 Player
     * @param player2 Player
     */
    public CoupleAnswerListener(Player player1, Player player2)
    {
      _playerRef1 = player1.getRef();
      _playerRef2 = player2.getRef();
    }
   
    /**
     * Method sayYes.
     * @see lineage2.gameserver.listener.actor.player.OnAnswerListener#sayYes()
     */
    @Override
    public void sayYes()
    {
      Player player1, player2;
      if (((player1 = _playerRef1.get()) == null) || ((player2 = _playerRef2.get()) == null))
      {
        return;
      }
      CoupleManager.getInstance().createCouple(player1, player2);
      player1.sendMessage(new CustomMessage("lineage2.gameserver.model.L2Player.EngageAnswerYes", player2));
    }
   
    /**
     * Method sayNo.
     * @see lineage2.gameserver.listener.actor.player.OnAnswerListener#sayNo()
     */
    @Override
    public void sayNo()
    {
      Player player1, player2;
      if (((player1 = _playerRef1.get()) == null) || ((player2 = _playerRef2.get()) == null))
      {
        return;
      }
      player1.sendMessage(new CustomMessage("lineage2.gameserver.model.L2Player.EngageAnswerNo", player2));
    }
  }
 
  /**
   * Field _log.
   */
  private static final Logger _log = LoggerFactory.getLogger(Wedding.class);
  /**
   * Field _voicedCommands.
   */
  private static String[] _voicedCommands =
  {
    "divorce",
    "engage",
    "gotolove"
  };
 
  /**
   * Method useVoicedCommand.
   * @param command String
   * @param activeChar Player
   * @param target String
   * @return boolean * @see lineage2.gameserver.handler.voicecommands.IVoicedCommandHandler#useVoicedCommand(String, Player, String)
   */
  @Override
  public boolean useVoicedCommand(String command, Player activeChar, String target)
  {
    if (!Config.ALLOW_WEDDING)
    {
      return false;
    }
    if (command.startsWith("engage"))
    {
      return engage(activeChar);
    }
    else if (command.startsWith("divorce"))
    {
      return divorce(activeChar);
    }
    else if (command.startsWith("gotolove"))
    {
      return goToLove(activeChar);
    }
    return false;
  }
 
  /**
   * Method divorce.
   * @param activeChar Player
   * @return boolean
   */
  public boolean divorce(Player activeChar)
  {
    if (activeChar.getPartnerId() == 0)
    {
      return false;
    }
    int _partnerId = activeChar.getPartnerId();
    long AdenaAmount = 0;
    if (activeChar.isMaried())
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.Divorced", activeChar));
      AdenaAmount = Math.abs(((activeChar.getAdena() / 100) * Config.WEDDING_DIVORCE_COSTS) - 10);
      activeChar.reduceAdena(AdenaAmount, true);
    }
    else
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.Disengaged", activeChar));
    }
    activeChar.setMaried(false);
    activeChar.setPartnerId(0);
    Couple couple = CoupleManager.getInstance().getCouple(activeChar.getCoupleId());
    couple.divorce();
    couple = null;
    Player partner = GameObjectsStorage.getPlayer(_partnerId);
    if (partner != null)
    {
      partner.setPartnerId(0);
      if (partner.isMaried())
      {
        partner.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PartnerDivorce", partner));
      }
      else
      {
        partner.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PartnerDisengage", partner));
      }
      partner.setMaried(false);
      if (AdenaAmount > 0)
      {
        partner.addAdena(AdenaAmount);
      }
    }
    return true;
  }
 
  /**
   * Method engage.
   * @param activeChar Player
   * @return boolean
   */
  public boolean engage(final Player activeChar)
  {
    if (activeChar.getTarget() == null)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.NoneTargeted", activeChar));
      return false;
    }
    if (!activeChar.getTarget().isPlayer())
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.OnlyAnotherPlayer", activeChar));
      return false;
    }
    if (activeChar.getPartnerId() != 0)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.AlreadyEngaged", activeChar));
      if (Config.WEDDING_PUNISH_INFIDELITY)
      {
        activeChar.startAbnormalEffect(AbnormalEffect.BIG_HEAD);
        int skillId;
        int skillLevel = 1;
        if (activeChar.getLevel() > 40)
        {
          skillLevel = 2;
        }
        if (activeChar.isMageClass())
        {
          skillId = 4361;
        }
        else
        {
          skillId = 4362;
        }
        Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
        if (activeChar.getEffectList().getEffectsBySkill(skill) == null)
        {
          skill.getEffects(activeChar, activeChar, false, false);
          activeChar.sendPacket(new SystemMessage(SystemMessage.S1_S2S_EFFECT_CAN_BE_FELT).addSkillName(skillId, skillLevel));
        }
      }
      return false;
    }
    final Player ptarget = (Player) activeChar.getTarget();
    if (ptarget.getObjectId() == activeChar.getObjectId())
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.EngagingYourself", activeChar));
      return false;
    }
    if (ptarget.isMaried())
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PlayerAlreadyMarried", activeChar));
      return false;
    }
    if (ptarget.getPartnerId() != 0)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PlayerAlreadyEngaged", activeChar));
      return false;
    }
    Pair<Integer, OnAnswerListener> entry = ptarget.getAskListener(false);
    if ((entry != null) && (entry.getValue() instanceof CoupleAnswerListener))
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PlayerAlreadyAsked", activeChar));
      return false;
    }
    if (ptarget.getPartnerId() != 0)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PlayerAlreadyEngaged", activeChar));
      return false;
    }
    if ((ptarget.getSex() == activeChar.getSex()) && !Config.WEDDING_SAMESEX)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.SameSex", activeChar));
      return false;
    }
    boolean FoundOnFriendList = false;
    int objectId;
    Connection con = null;
    PreparedStatement statement = null;
    ResultSet rset = null;
    try
    {
      con = DatabaseFactory.getInstance().getConnection();
      statement = con.prepareStatement("SELECT friend_id FROM character_friends WHERE char_id=?");
      statement.setInt(1, ptarget.getObjectId());
      rset = statement.executeQuery();
      while (rset.next())
      {
        objectId = rset.getInt("friend_id");
        if (objectId == activeChar.getObjectId())
        {
          FoundOnFriendList = true;
          break;
        }
      }
    }
    catch (Exception e)
    {
      _log.error("", e);
    }
    finally
    {
      DbUtils.closeQuietly(con, statement, rset);
    }
    if (!FoundOnFriendList)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.NotInFriendlist", activeChar));
      return false;
    }
    ConfirmDlg packet = new ConfirmDlg(SystemMsg.S1, 60000).addString("Player " + activeChar.getName() + " asking you to engage. Do you want to start new relationship?");
    ptarget.ask(packet, new CoupleAnswerListener(activeChar, ptarget));
    return true;
  }
 
  /**
   * Method goToLove.
   * @param activeChar Player
   * @return boolean
   */
  public boolean goToLove(Player activeChar)
  {
    if (!activeChar.isMaried())
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.YoureNotMarried", activeChar));
      return false;
    }
    if (activeChar.getPartnerId() == 0)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PartnerNotInDB", activeChar));
      return false;
    }
    Player partner = GameObjectsStorage.getPlayer(activeChar.getPartnerId());
    if (partner == null)
    {
      activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.PartnerOffline", activeChar));
      return false;
    }
    if (partner.isInOlympiadMode() || activeChar.isMovementDisabled() || activeChar.isMuted(null) || activeChar.isInOlympiadMode() || activeChar.isInDuel() || activeChar.getPlayer().isTerritoryFlagEquipped() || partner.isInZone(no_summon))
    {
      activeChar.sendMessage(new CustomMessage("common.TryLater", activeChar));
      return false;
    }
    if ((activeChar.getTeleMode() != 0) || (activeChar.getReflection() != ReflectionManager.DEFAULT))
    {
      activeChar.sendMessage(new CustomMessage("common.TryLater", activeChar));
      return false;
    }
    if (partner.isInZoneBattle() || partner.isInZone(Zone.ZoneType.SIEGE) || partner.isInZone(no_restart) || partner.isInOlympiadMode() || activeChar.isInZoneBattle() || activeChar.isInZone(Zone.ZoneType.SIEGE) || activeChar.isInZone(no_restart) || activeChar.isInOlympiadMode() || (partner.getReflection() != ReflectionManager.DEFAULT) || partner.isInZone(no_summon) || activeChar.isInObserverMode() || partner.isInObserverMode())
    {
      activeChar.sendPacket(Msg.YOUR_TARGET_IS_IN_AN_AREA_WHICH_BLOCKS_SUMMONING);
      return false;
    }
    if (!activeChar.reduceAdena(Config.WEDDING_TELEPORT_PRICE, true))
    {
      activeChar.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
      return false;
    }
    int teleportTimer = Config.WEDDING_TELEPORT_INTERVAL;
    activeChar.abortAttack(true, true);
    activeChar.abortCast(true, true);
    activeChar.sendActionFailed();
    activeChar.stopMove();
    activeChar.startParalyzed();
    activeChar.sendMessage(new CustomMessage("voicedcommandhandlers.Wedding.Teleport", activeChar).addNumber(teleportTimer / 60));
    activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
    activeChar.broadcastPacket(new MagicSkillUse(activeChar, activeChar, 1050, 1, teleportTimer, 0));
    activeChar.sendPacket(new SetupGauge(activeChar, SetupGauge.BLUE_DUAL, teleportTimer));
    ThreadPoolManager.getInstance().schedule(new EscapeFinalizer(activeChar, partner.getLoc()), teleportTimer * 1000L);
    return true;
  }
 
  /**
   * @author Mobius
   */
  static class EscapeFinalizer extends RunnableImpl
  {
    /**
     * Field _activeChar.
     */
    private final Player _activeChar;
    /**
     * Field _loc.
     */
    private final Location _loc;
   
    /**
     * Constructor for EscapeFinalizer.
     * @param activeChar Player
     * @param loc Location
     */
    EscapeFinalizer(Player activeChar, Location loc)
    {
      _activeChar = activeChar;
      _loc = loc;
    }
   
    /**
     * Method runImpl.
     */
    @Override
    public void runImpl()
    {
      _activeChar.stopParalyzed();
      if (_activeChar.isDead())
      {
        return;
      }
      _activeChar.teleToLocation(_loc);
    }
  }
 
  /**
   * Method getVoicedCommandList.
   * @return String[] * @see lineage2.gameserver.handler.voicecommands.IVoicedCommandHandler#getVoicedCommandList()
   */
  @Override
  public String[] getVoicedCommandList()
  {
    return _voicedCommands;
  }
 
  /**
   * Method onLoad.
   */
  public void onLoad()
  {
    VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this);
  }
 
  /**
   * Method onReload.
   */
  public void onReload()
  {
  }
 
  /**
   * Method onShutdown.
   */
  public void onShutdown()
  {
  }
}
TOP

Related Classes of lineage2.gameserver.handler.voicecommands.impl.Wedding

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.