Package l2p.gameserver.skills.skillclasses

Source Code of l2p.gameserver.skills.skillclasses.Heal

package l2p.gameserver.skills.skillclasses;

import l2p.extensions.multilang.CustomMessage;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Skill;
import l2p.gameserver.model.instances.L2SiegeHeadquarterInstance;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.skills.Stats;
import l2p.gameserver.templates.StatsSet;
import l2p.util.GArray;

public class Heal extends L2Skill
{
  @Override
  public boolean checkCondition(L2Character activeChar, L2Character target, boolean forceUse, boolean dontMove, boolean first)
  {
    if(target == null || target.isDoor() || target instanceof L2SiegeHeadquarterInstance)
    {
      return false;
    }
    return super.checkCondition(activeChar, target, forceUse, dontMove, first);
  }

  public Heal(StatsSet set)
  {
    super(set);
  }

  @Override
  public void useSkill(L2Character activeChar, GArray<L2Character> targets)
  {
    // Надо уточнить формулу.
    double hp = _power;
    if(!isHandler())
    {
      hp += 0.1 * _power * Math.sqrt(activeChar.getMAtk(null, this) / 333);
    }
    int sps = isSSPossible() && getHpConsume() == 0 ? activeChar.getChargedSpiritShot() : 0;
    if(sps == 2)
    {
      hp *= 1.5;
    }
    else if(sps == 1)
    {
      hp *= 1.3;
    }
    if(activeChar.getSkillMastery(getId()) == 3)
    {
      activeChar.removeSkillMastery(getId());
      hp *= 3;
    }
    for(L2Character target : targets)
    {
      if(target != null)
      {
        if(target.isDead() || target.isHealBlocked(true))
        {
          continue;
        }
        // Player holding a cursed weapon can't be healed and can't heal
        if(target != activeChar)
        {
          if(target.isPlayer() && target.isCursedWeaponEquipped())
          {
            continue;
          }
          else if(activeChar.isPlayer() && activeChar.isCursedWeaponEquipped())
          {
            continue;
          }
        }
        double maxNewHp = hp * target.calcStat(Stats.HEAL_EFFECTIVNESS, 100, activeChar, this) / 100;
        maxNewHp = activeChar.calcStat(Stats.HEAL_POWER, maxNewHp, target, this);
        double addToHp = Math.max(0, Math.min(maxNewHp, target.calcStat(Stats.HP_LIMIT, null, null) * target.getMaxHp() / 100. - target.getCurrentHp()));
        if(addToHp > 0)
        {
          target.setCurrentHp(addToHp + target.getCurrentHp(), false);
        }
        if(getId() == 4051)
        {
          target.sendPacket(Msg.REJUVENATING_HP);
        }
        else if(target.isPlayer())
        {
          if(activeChar == target)
          {
            activeChar.sendPacket(new SystemMessage(SystemMessage.S1_HPS_HAVE_BEEN_RESTORED).addNumber(Math.round(addToHp)));
          }
          else
          // FIXME показывать ли лекарю, сколько он восстановил HP цели?
          {
            target.sendPacket(new SystemMessage(SystemMessage.XS2S_HP_HAS_BEEN_RESTORED_BY_S1).addString(activeChar.getName()).addNumber(Math.round(addToHp)));
          }
        }
        else if(target.isSummon() || target.isPet())
        {
          L2Player owner = target.getPlayer();
          if(owner != null)
          {
            if(activeChar == target) // Пет лечит сам себя
            {
              owner.sendMessage(new CustomMessage("YOU_HAVE_RESTORED_S1_HP_OF_YOUR_PET", owner).addNumber(Math.round(addToHp)));
            }
            else if(owner == activeChar) // Хозяин лечит пета
            {
              owner.sendMessage(new CustomMessage("YOU_HAVE_RESTORED_S1_HP_OF_YOUR_PET", owner).addNumber(Math.round(addToHp)));
            }
            else
            // Пета лечит кто-то другой
            {
              owner.sendMessage(new CustomMessage("S1_HAS_BEEN_RESTORED_S2_HP_OF_YOUR_PET", owner).addString(activeChar.getName()).addNumber(Math.round(addToHp)));
            }
          }
        }
        getEffects(activeChar, target, getActivateRate() > 0, false);
      }
    }
    if(isSSPossible())
    {
      activeChar.unChargeShots(isMagic());
    }
  }
}
TOP

Related Classes of l2p.gameserver.skills.skillclasses.Heal

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.