/* * 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 silentium.gameserver.model.actor.stat; import silentium.gameserver.model.L2ItemInstance; import silentium.gameserver.model.L2Skill; import silentium.gameserver.model.actor.L2Character; import silentium.gameserver.model.actor.instance.L2PetInstance; import silentium.gameserver.network.SystemMessageId; import silentium.gameserver.network.serverpackets.InventoryUpdate; import silentium.gameserver.network.serverpackets.SocialAction; import silentium.gameserver.network.serverpackets.SystemMessage; import silentium.gameserver.skills.Stats; import silentium.gameserver.tables.PetDataTable; public class PetStat extends SummonStat { public PetStat(L2PetInstance activeChar) { super(activeChar); } public boolean addExp(int value) { if (!super.addExp(value)) return false; getActiveChar().updateAndBroadcastStatus(1); return true; } @Override public boolean addExpAndSp(long addToExp, int addToSp) { if (!super.addExpAndSp(addToExp, addToSp)) return false; SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.PET_EARNED_S1_EXP); sm.addNumber((int) addToExp); getActiveChar().getOwner().sendPacket(sm); return true; } @Override public final boolean addLevel(byte value) { if (getLevel() + value > (getMaxLevel() - 1)) return false; boolean levelIncreased = super.addLevel(value); if (levelIncreased) getActiveChar().broadcastPacket(new SocialAction(getActiveChar(), 15)); return levelIncreased; } @Override public final long getExpForLevel(int level) { return PetDataTable.getInstance().getPetLevelData(getActiveChar().getNpcId(), level).getPetMaxExp(); } @Override public L2PetInstance getActiveChar() { return (L2PetInstance) super.getActiveChar(); } public final int getFeedBattle() { return getActiveChar().getPetLevelData().getPetFeedBattle(); } public final int getFeedNormal() { return getActiveChar().getPetLevelData().getPetFeedNormal(); } public final int getMaxFeed() { return getActiveChar().getPetLevelData().getPetMaxFeed(); } @Override public void setLevel(byte value) { getActiveChar().setPetData(PetDataTable.getInstance().getPetLevelData(getActiveChar().getTemplate().getNpcId(), value)); getActiveChar().stopFeed(); super.setLevel(value); // Set level. getActiveChar().startFeed(); // If a control item exists and its level is different of the new level. final L2ItemInstance controlItem = getActiveChar().getControlItem(); if (controlItem != null && controlItem.getEnchantLevel() != getLevel()) { getActiveChar().sendPetInfosToOwner(); controlItem.setEnchantLevel(getLevel()); // Update item InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(controlItem); getActiveChar().getOwner().sendPacket(iu); } } @Override public int getMaxHp() { return (int) calcStat(Stats.MAX_HP, getActiveChar().getPetLevelData().getPetMaxHP(), null, null); } @Override public int getMaxMp() { return (int) calcStat(Stats.MAX_MP, getActiveChar().getPetLevelData().getPetMaxMP(), null, null); } @Override public int getMAtk(L2Character target, L2Skill skill) { double attack = getActiveChar().getPetLevelData().getPetMAtk(); if (skill != null) attack += skill.getPower(); return (int) calcStat(Stats.MAGIC_ATTACK, attack, target, skill); } @Override public int getMDef(L2Character target, L2Skill skill) { double defence = getActiveChar().getPetLevelData().getPetMDef(); return (int) calcStat(Stats.MAGIC_DEFENCE, defence, target, skill); } @Override public int getPAtk(L2Character target) { return (int) calcStat(Stats.POWER_ATTACK, getActiveChar().getPetLevelData().getPetPAtk(), target, null); } @Override public int getPDef(L2Character target) { return (int) calcStat(Stats.POWER_DEFENCE, getActiveChar().getPetLevelData().getPetPDef(), target, null); } @Override public int getPAtkSpd() { int val = super.getPAtkSpd(); if (getActiveChar().isHungry()) val = val / 2; return val; } @Override public int getMAtkSpd() { int val = super.getMAtkSpd(); if (getActiveChar().isHungry()) val = val / 2; return val; } }