From 2b141cb81a1d3d55dbff368cf3158a822ae04536 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 26 Dec 2016 18:15:45 +0000 Subject: [PATCH] Pet max level differs from player max level. --- .../com/l2jmobius/gameserver/model/L2PetData.java | 13 +++++++++++++ .../model/actor/instance/L2PetInstance.java | 5 +++-- .../gameserver/model/actor/stat/PcStat.java | 5 +++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java index 6b3b63066e..e7cc17956e 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/L2PetData.java @@ -38,6 +38,7 @@ public class L2PetData private int _load = 20000; private int _hungryLimit = 1; private int _minlvl = Byte.MAX_VALUE; + private int _maxlvl = 0; private boolean _syncLevel = false; private final List _food = new ArrayList<>(); @@ -73,6 +74,10 @@ public class L2PetData { _minlvl = level; } + if (_maxlvl < (level - 1)) + { + _maxlvl = level - 1; + } _levelStats.put(level, data); } @@ -117,6 +122,14 @@ public class L2PetData return _minlvl; } + /** + * @return the pet's maximum level. + */ + public int getMaxLevel() + { + return _maxlvl; + } + /** * @return the pet's food list. */ diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java index 97eb0b081c..026d13c866 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PetInstance.java @@ -229,8 +229,9 @@ public class L2PetInstance extends L2Summon pet.setTitle(owner.getName()); if (data.isSynchLevel() && (pet.getLevel() != owner.getLevel())) { - pet.getStat().setLevel((byte) owner.getLevel()); - pet.getStat().setExp(pet.getStat().getExpForLevel(owner.getLevel())); + final byte availableLevel = (byte) Math.min(data.getMaxLevel(), owner.getLevel()); + pet.getStat().setLevel(availableLevel); + pet.getStat().setExp(pet.getStat().getExpForLevel(availableLevel)); } L2World.getInstance().addPet(owner.getObjectId(), pet); } diff --git a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/PcStat.java b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/PcStat.java index 788d9e1afd..ec56eb29fd 100644 --- a/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/PcStat.java +++ b/L2J_Mobius_Underground/java/com/l2jmobius/gameserver/model/actor/stat/PcStat.java @@ -249,8 +249,9 @@ public class PcStat extends PlayableStat final L2PetInstance pet = (L2PetInstance) sPet; if (pet.getPetData().isSynchLevel() && (pet.getLevel() != getLevel())) { - pet.getStat().setLevel(getLevel()); - pet.getStat().getExpForLevel(getActiveChar().getLevel()); + final byte availableLevel = (byte) Math.min(pet.getPetData().getMaxLevel(), getLevel()); + pet.getStat().setLevel(availableLevel); + pet.getStat().getExpForLevel(availableLevel); pet.setCurrentHp(pet.getMaxHp()); pet.setCurrentMp(pet.getMaxMp()); pet.broadcastPacket(new SocialAction(getActiveChar().getObjectId(), SocialAction.LEVEL_UP));