Package com.l2jfrozen.gameserver.model.actor.stat

Source Code of com.l2jfrozen.gameserver.model.actor.stat.PetStat

/* 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.model.actor.stat;

import com.l2jfrozen.gameserver.datatables.sql.L2PetDataTable;
import com.l2jfrozen.gameserver.datatables.xml.ExperienceData;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2Skill;
import com.l2jfrozen.gameserver.model.actor.instance.L2PetInstance;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.PetInfo;
import com.l2jfrozen.gameserver.network.serverpackets.StatusUpdate;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.skills.Stats;

public class PetStat extends SummonStat
{
  public PetStat(L2PetInstance activeChar)
  {
    super(activeChar);
  }
 
  public boolean addExp(int value)
  {
    if(!super.addExp(value))
      return false;

    /* Micht : Use of PetInfo for C5
    StatusUpdate su = new StatusUpdate(getActiveChar().getObjectId());
    su.addAttribute(StatusUpdate.EXP, getExp());
    getActiveChar().broadcastPacket(su);
    */
    getActiveChar().broadcastPacket(new PetInfo(getActiveChar()));
    // The PetInfo packet wipes the PartySpelled (list of active  spells' icons).  Re-add them
    getActiveChar().updateEffectIcons(true);

    return true;
  }

  @Override
  public boolean addExpAndSp(long addToExp, int addToSp)
  {
    if(!super.addExpAndSp(addToExp, addToSp))
      return false;

    SystemMessage sm = new SystemMessage(SystemMessageId.PET_EARNED_S1_EXP);
    sm.addNumber((int) addToExp);

    getActiveChar().getOwner().sendPacket(sm);
    sm = null;

    return true;
  }

  @Override
  public final boolean addLevel(byte value)
  {
    if(getLevel() + value > ExperienceData.getInstance().getMaxLevel() - 1)
      return false;

    boolean levelIncreased = super.addLevel(value);

    // Sync up exp with current level
    if(getExp() > getExpForLevel(getLevel() + 1) || getExp() < getExpForLevel(getLevel()))
    {
      setExp(ExperienceData.getInstance().getExpForLevel(getLevel()));
    }

    if(levelIncreased)
    {
      getActiveChar().getOwner().sendMessage("Your pet has increased it's level.");
    }

    StatusUpdate su = new StatusUpdate(getActiveChar().getObjectId());
    su.addAttribute(StatusUpdate.LEVEL, getLevel());
    su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
    su.addAttribute(StatusUpdate.MAX_MP, getMaxMp());
    getActiveChar().broadcastPacket(su);
    su = null;

    // Send a Server->Client packet PetInfo to the L2PcInstance
    getActiveChar().getOwner().sendPacket(new PetInfo(getActiveChar()));
    // The PetInfo packet wipes the PartySpelled (list of active  spells' icons).  Re-add them
    getActiveChar().updateEffectIcons(true);

    if(getActiveChar().getControlItem() != null)
    {
      getActiveChar().getControlItem().setEnchantLevel(getLevel());
    }

    return levelIncreased;
  }

  @Override
  public final long getExpForLevel(int level)
  {
    return L2PetDataTable.getInstance().getPetData(getActiveChar().getNpcId(), level).getPetMaxExp();
  }
 
  @Override
  public L2PetInstance getActiveChar()
  {
    return (L2PetInstance) super.getActiveChar();
  }

  public final int getFeedBattle()
  {
    return getActiveChar().getPetData().getPetFeedBattle();
  }

  public final int getFeedNormal()
  {
    return getActiveChar().getPetData().getPetFeedNormal();
  }

  @Override
  public void setLevel(int value)
  {
    getActiveChar().stopFeed();
    super.setLevel(value);

    getActiveChar().setPetData(L2PetDataTable.getInstance().getPetData(getActiveChar().getTemplate().npcId, getLevel()));
    getActiveChar().startFeed(false);

    if(getActiveChar().getControlItem() != null)
    {
      getActiveChar().getControlItem().setEnchantLevel(getLevel());
    }
  }

  public final int getMaxFeed()
  {
    return getActiveChar().getPetData().getPetMaxFeed();
  }

  @Override
  public int getMaxHp()
  {
    return (int) calcStat(Stats.MAX_HP, getActiveChar().getPetData().getPetMaxHP(), null, null);
  }

  @Override
  public int getMaxMp()
  {
    return (int) calcStat(Stats.MAX_MP, getActiveChar().getPetData().getPetMaxMP(), null, null);
  }

  @Override
  public int getMAtk(L2Character target, L2Skill skill)
  {
    double attack = getActiveChar().getPetData().getPetMAtk();
    Stats stat = skill == null ? null : skill.getStat();

    if(stat != null)
    {
      switch(stat)
      {
        case AGGRESSION:
          attack += getActiveChar().getTemplate().baseAggression;
          break;
        case BLEED:
          attack += getActiveChar().getTemplate().baseBleed;
          break;
        case POISON:
          attack += getActiveChar().getTemplate().basePoison;
          break;
        case STUN:
          attack += getActiveChar().getTemplate().baseStun;
          break;
        case ROOT:
          attack += getActiveChar().getTemplate().baseRoot;
          break;
        case MOVEMENT:
          attack += getActiveChar().getTemplate().baseMovement;
          break;
        case CONFUSION:
          attack += getActiveChar().getTemplate().baseConfusion;
          break;
        case SLEEP:
          attack += getActiveChar().getTemplate().baseSleep;
          break;
        case FIRE:
          attack += getActiveChar().getTemplate().baseFire;
          break;
        case WIND:
          attack += getActiveChar().getTemplate().baseWind;
          break;
        case WATER:
          attack += getActiveChar().getTemplate().baseWater;
          break;
        case EARTH:
          attack += getActiveChar().getTemplate().baseEarth;
          break;
        case HOLY:
          attack += getActiveChar().getTemplate().baseHoly;
          break;
        case DARK:
          attack += getActiveChar().getTemplate().baseDark;
          break;
      }
    }

    if(skill != null)
    {
      attack += skill.getPower();
    }

    stat = null;

    return (int) calcStat(Stats.MAGIC_ATTACK, attack, target, skill);
  }

  @Override
  public int getMDef(L2Character target, L2Skill skill)
  {
    double defence = getActiveChar().getPetData().getPetMDef();

    return (int) calcStat(Stats.MAGIC_DEFENCE, defence, target, skill);
  }

  @Override
  public int getPAtk(L2Character target)
  {
    return (int) calcStat(Stats.POWER_ATTACK, getActiveChar().getPetData().getPetPAtk(), target, null);
  }

  @Override
  public int getPDef(L2Character target)
  {
    return (int) calcStat(Stats.POWER_DEFENCE, getActiveChar().getPetData().getPetPDef(), target, null);
  }

  @Override
  public int getAccuracy()
  {
    return (int) calcStat(Stats.ACCURACY_COMBAT, getActiveChar().getPetData().getPetAccuracy(), null, null);
  }

  @Override
  public int getCriticalHit(L2Character target, L2Skill skill)
  {
    return (int) calcStat(Stats.CRITICAL_RATE, getActiveChar().getPetData().getPetCritical(), target, null);
  }

  @Override
  public int getEvasionRate(L2Character target)
  {
    return (int) calcStat(Stats.EVASION_RATE, getActiveChar().getPetData().getPetEvasion(), target, null);
  }

  @Override
  public int getRunSpeed()
  {
    return (int) calcStat(Stats.RUN_SPEED, getActiveChar().getPetData().getPetSpeed(), null, null);
  }

  @Override
  public int getPAtkSpd()
  {
    return (int) calcStat(Stats.POWER_ATTACK_SPEED, getActiveChar().getPetData().getPetAtkSpeed(), null, null);
  }

  @Override
  public int getMAtkSpd()
  {
    return (int) calcStat(Stats.MAGIC_ATTACK_SPEED, getActiveChar().getPetData().getPetCastSpeed(), null, null);
  }
}
TOP

Related Classes of com.l2jfrozen.gameserver.model.actor.stat.PetStat

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.