Browse Source

BETA: Minor typo fix pets will no longer receive exp form their master if they are not around him thanks goncafa for the report.
And format of L2PetInstance

Rumen Nikiforov 13 years ago
parent
commit
898883c6c4

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java

@@ -815,7 +815,7 @@ public class L2Attackable extends L2Npc
 							}
 							L2Playable summon = pl.getPet();
 							
-							if (summon != null && summon instanceof L2PetInstance)
+							if (summon != null && summon.isPet())
 							{
 								reward2 = rewards.get(summon);
 								

+ 8 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -6207,6 +6207,14 @@ public final class L2PcInstance extends L2Playable
 		return _summon;
 	}
 	
+	/**
+	 * @return {@code true} if the player has a pet, {@code false} otherwise
+	 */
+	public boolean hasPet()
+	{
+		return _summon != null;
+	}
+	
 	/**
 	 * @return the L2Decoy of the L2PcInstance or null.
 	 */

+ 138 - 89
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java

@@ -72,7 +72,6 @@ import com.l2jserver.util.Rnd;
 
 /**
  * This class ...
- *
  * @version $Revision: 1.15.2.10.2.16 $ $Date: 2005/04/06 16:13:40 $
  */
 public class L2PetInstance extends L2Summon
@@ -82,7 +81,7 @@ public class L2PetInstance extends L2Summon
 	private static final String ADD_SKILL_SAVE = "INSERT INTO character_pet_skills_save (petObjItemId,skill_id,skill_level,effect_count,effect_cur_time,buff_index) VALUES (?,?,?,?,?,?)";
 	private static final String RESTORE_SKILL_SAVE = "SELECT petObjItemId,skill_id,skill_level,effect_count,effect_cur_time,buff_index FROM character_pet_skills_save WHERE petObjItemId=? ORDER BY buff_index ASC";
 	private static final String DELETE_SKILL_SAVE = "DELETE FROM character_pet_skills_save WHERE petObjItemId=?";
-
+	
 	private int _curFed;
 	private final PetInventory _inventory;
 	private final int _controlObjectId;
@@ -114,16 +113,17 @@ public class L2PetInstance extends L2Summon
 		return _data;
 	}
 	
-	public final void setPetData(L2PetLevelData value) { _leveldata = value; }
+	public final void setPetData(L2PetLevelData value)
+	{
+		_leveldata = value;
+	}
 	
 	/**
-	 * Manage Feeding Task.<BR><BR>
-	 *
+	 * Manage Feeding Task.<BR>
+	 * <BR>
 	 * <B><U> Actions</U> :</B><BR>
-	 * <li>Feed or kill the pet depending on hunger level</li>
-	 * <li>If pet has food in inventory and feed level drops below 55% then consume food from inventory</li>
-	 * <li>Send a broadcastStatusUpdate packet for this L2PetInstance</li><BR><BR>
-	 *
+	 * <li>Feed or kill the pet depending on hunger level</li> <li>If pet has food in inventory and feed level drops below 55% then consume food from inventory</li> <li>Send a broadcastStatusUpdate packet for this L2PetInstance</li><BR>
+	 * <BR>
 	 */
 	
 	class FeedTask implements Runnable
@@ -156,9 +156,9 @@ public class L2PetInstance extends L2Summon
 					if (getCurrentFed() == 0)
 					{
 						// Owl Monk remove PK
-						if(getTemplate().getNpcId() == 16050 && getOwner() != null)
+						if (getTemplate().getNpcId() == 16050 && getOwner() != null)
 						{
-							getOwner().setPkKills(Math.max(0, getOwner().getPkKills()-Rnd.get(1,6)));
+							getOwner().setPkKills(Math.max(0, getOwner().getPkKills() - Rnd.get(1, 6)));
 						}
 						sendPacket(SystemMessageId.THE_HELPER_PET_LEAVING);
 						deleteMe(getOwner());
@@ -204,7 +204,7 @@ public class L2PetInstance extends L2Summon
 							stopFeed();
 							sm = SystemMessage.getSystemMessage(SystemMessageId.STARVING_GRUMPY_AND_FED_UP_YOUR_PET_HAS_LEFT);
 							sendPacket(sm);
-							_log.info("Hungry pet ["+getTemplate().getName()+"]["+getLevel()+"] deleted for player: "+getOwner()+" Control Item Id :"+getControlObjectId());
+							_log.info("Hungry pet [" + getTemplate().getName() + "][" + getLevel() + "] deleted for player: " + getOwner() + " Control Item Id :" + getControlObjectId());
 							deleteMe(getOwner());
 						}
 					}
@@ -217,7 +217,7 @@ public class L2PetInstance extends L2Summon
 							stopFeed();
 							sm = SystemMessage.getSystemMessage(SystemMessageId.STARVING_GRUMPY_AND_FED_UP_YOUR_PET_HAS_LEFT);
 							sendPacket(sm);
-							_log.info("Hungry pet ["+getTemplate().getName()+"]["+getLevel()+"] deleted for player: "+getOwner()+" Control Item Id :"+getControlObjectId());
+							_log.info("Hungry pet [" + getTemplate().getName() + "][" + getLevel() + "] deleted for player: " + getOwner() + " Control Item Id :" + getControlObjectId());
 							deleteMe(getOwner());
 						}
 					}
@@ -225,7 +225,7 @@ public class L2PetInstance extends L2Summon
 			}
 			catch (Exception e)
 			{
-				_logPet.log(Level.SEVERE, "Pet [ObjectId: "+getObjectId()+"] a feed task error has occurred", e);
+				_logPet.log(Level.SEVERE, "Pet [ObjectId: " + getObjectId() + "] a feed task error has occurred", e);
 			}
 		}
 		
@@ -245,7 +245,7 @@ public class L2PetInstance extends L2Summon
 	{
 		if (L2World.getInstance().getPet(owner.getObjectId()) != null)
 			return null; // owner has a pet listed in world
-		
+			
 		L2PetInstance pet = restore(control, template, owner);
 		// add the pet instance to world
 		if (pet != null)
@@ -284,7 +284,7 @@ public class L2PetInstance extends L2Summon
 		
 		_controlObjectId = control.getObjectId();
 		
-		getStat().setLevel((byte)Math.max(level, PetDataTable.getInstance().getPetMinLevel(template.getNpcId())));
+		getStat().setLevel((byte) Math.max(level, PetDataTable.getInstance().getPetMinLevel(template.getNpcId())));
 		
 		_inventory = new PetInventory(this);
 		_inventory.restore();
@@ -298,7 +298,7 @@ public class L2PetInstance extends L2Summon
 	@Override
 	public PetStat getStat()
 	{
-		return (PetStat)super.getStat();
+		return (PetStat) super.getStat();
 	}
 	
 	@Override
@@ -308,24 +308,42 @@ public class L2PetInstance extends L2Summon
 	}
 	
 	@Override
-	public double getLevelMod() { return (100.0 - 11 + getLevel()) / 100.0; }
+	public double getLevelMod()
+	{
+		return (100.0 - 11 + getLevel()) / 100.0;
+	}
 	
-	public boolean isRespawned() { return _respawned; }
+	public boolean isRespawned()
+	{
+		return _respawned;
+	}
 	
 	@Override
-	public int getSummonType() { return 2; }
+	public int getSummonType()
+	{
+		return 2;
+	}
 	
 	@Override
-	public int getControlObjectId() { return _controlObjectId; }
+	public int getControlObjectId()
+	{
+		return _controlObjectId;
+	}
 	
 	public L2ItemInstance getControlItem()
 	{
 		return getOwner().getInventory().getItemByObjectId(_controlObjectId);
 	}
 	
-	public int getCurrentFed() { return _curFed; }
+	public int getCurrentFed()
+	{
+		return _curFed;
+	}
 	
-	public void setCurrentFed(int num) { _curFed = num > getMaxFed() ? getMaxFed() : num; }
+	public void setCurrentFed(int num)
+	{
+		_curFed = num > getMaxFed() ? getMaxFed() : num;
+	}
 	
 	/**
 	 * Returns the pet's currently equipped weapon instance (if any).
@@ -334,8 +352,7 @@ public class L2PetInstance extends L2Summon
 	public L2ItemInstance getActiveWeaponInstance()
 	{
 		for (L2ItemInstance item : getInventory().getItems())
-			if (item.getLocation() == L2ItemInstance.ItemLocation.PET_EQUIP &&
-					item.getItem().getBodyPart() == L2Item.SLOT_R_HAND)
+			if (item.getLocation() == L2ItemInstance.ItemLocation.PET_EQUIP && item.getItem().getBodyPart() == L2Item.SLOT_R_HAND)
 				return item;
 		
 		return null;
@@ -352,7 +369,7 @@ public class L2PetInstance extends L2Summon
 		if (weapon == null)
 			return null;
 		
-		return (L2Weapon)weapon.getItem();
+		return (L2Weapon) weapon.getItem();
 	}
 	
 	@Override
@@ -411,7 +428,7 @@ public class L2PetInstance extends L2Summon
 				sm.addItemNumber(count);
 				sendPacket(sm);
 			}
-			else 
+			else
 			{
 				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
 				sm.addItemName(item.getItemId());
@@ -437,7 +454,7 @@ public class L2PetInstance extends L2Summon
 		
 		if (item == null)
 		{
-			if (sendMessage) 
+			if (sendMessage)
 				sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
 			return false;
 		}
@@ -456,7 +473,7 @@ public class L2PetInstance extends L2Summon
 				sm.addItemNumber(count);
 				sendPacket(sm);
 			}
-			else 
+			else
 			{
 				SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
 				sm.addItemName(item.getItemId());
@@ -471,19 +488,20 @@ public class L2PetInstance extends L2Summon
 	protected void doPickupItem(L2Object object)
 	{
 		boolean follow = getFollowStatus();
-		if (isDead()) return;
+		if (isDead())
+			return;
 		getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 		StopMove sm = new StopMove(getObjectId(), getX(), getY(), getZ(), getHeading());
 		
 		if (Config.DEBUG)
-			_logPet.fine("Pet pickup pos: "+ object.getX() + " "+object.getY()+ " "+object.getZ() );
+			_logPet.fine("Pet pickup pos: " + object.getX() + " " + object.getY() + " " + object.getZ());
 		
 		broadcastPacket(sm);
 		
 		if (!(object instanceof L2ItemInstance))
 		{
 			// dont try to pickup anything that is not an item :)
-			_logPet.warning(this+" trying to pickup wrong target."+object);
+			_logPet.warning(this + " trying to pickup wrong target." + object);
 			sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
@@ -491,7 +509,7 @@ public class L2PetInstance extends L2Summon
 		L2ItemInstance target = (L2ItemInstance) object;
 		
 		// Cursed weapons
-		if ( CursedWeaponsManager.getInstance().isCursed(target.getItemId()) )
+		if (CursedWeaponsManager.getInstance().isCursed(target.getItemId()))
 		{
 			SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.FAILED_TO_PICKUP_S1);
 			smsg.addItemName(target.getItemId());
@@ -514,12 +532,12 @@ public class L2PetInstance extends L2Summon
 				sendPacket(smsg);
 				return;
 			}
-			if ( !_inventory.validateCapacity(target))
+			if (!_inventory.validateCapacity(target))
 			{
 				sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_ANY_MORE_ITEMS);
 				return;
 			}
-			if ( !_inventory.validateWeight(target, target.getCount()))
+			if (!_inventory.validateWeight(target, target.getCount()))
 			{
 				sendPacket(SystemMessageId.UNABLE_TO_PLACE_ITEM_YOUR_PET_IS_TOO_ENCUMBERED);
 				return;
@@ -550,13 +568,12 @@ public class L2PetInstance extends L2Summon
 				
 				return;
 			}
-			if(target.getItemLootShedule() != null
-					&& (target.getOwnerId() == getOwner().getObjectId() || getOwner().isInLooterParty(target.getOwnerId())))
+			if (target.getItemLootShedule() != null && (target.getOwnerId() == getOwner().getObjectId() || getOwner().isInLooterParty(target.getOwnerId())))
 				target.resetOwnerTimer();
 			
 			target.pickupMe(this);
 			
-			if(Config.SAVE_DROPPED_ITEM) // item must be removed from ItemsOnGroundManager if is active
+			if (Config.SAVE_DROPPED_ITEM) // item must be removed from ItemsOnGroundManager if is active
 				ItemsOnGroundManager.getInstance().removeObject(target);
 		}
 		
@@ -602,7 +619,7 @@ public class L2PetInstance extends L2Summon
 				sendPacket(sm2);
 			}
 			getInventory().addItem("Pickup", target, getOwner(), this);
-			//FIXME Just send the updates if possible (old way wasn't working though)
+			// FIXME Just send the updates if possible (old way wasn't working though)
 			PetItemList iu = new PetItemList(this);
 			sendPacket(iu);
 		}
@@ -618,22 +635,21 @@ public class L2PetInstance extends L2Summon
 	{
 		getInventory().transferItemsToOwner();
 		super.deleteMe(owner);
-		destroyControlItem(owner, false); //this should also delete the pet from the db
+		destroyControlItem(owner, false); // this should also delete the pet from the db
 		CharSummonTable.getInstance().getPets().remove(getOwner().getObjectId());
 	}
 	
 	@Override
 	public boolean doDie(L2Character killer)
 	{
-		if (!super.doDie(killer,true))
+		if (!super.doDie(killer, true))
 			return false;
 		stopFeed();
 		sendPacket(SystemMessageId.MAKE_SURE_YOU_RESSURECT_YOUR_PET_WITHIN_24_HOURS);
 		DecayTaskManager.getInstance().addDecayTask(this, PET_DECAY_DELAY);
 		// do not decrease exp if is in duel, arena
 		L2PcInstance owner = getOwner();
-		if (owner != null && !owner.isInDuel()
-				&& (!isInsideZone(ZONE_PVP) || isInsideZone(ZONE_SIEGE)))
+		if (owner != null && !owner.isInDuel() && (!isInsideZone(ZONE_PVP) || isInsideZone(ZONE_SIEGE)))
 		{
 			deathPenalty();
 		}
@@ -669,7 +685,7 @@ public class L2PetInstance extends L2Summon
 	 * @param process string identifier of process triggering this action
 	 * @param objectId Item Identifier of the item to be transfered
 	 * @param count Quantity of items to be transfered
-	 * @param target 
+	 * @param target
 	 * @param actor the player requesting the item transfer
 	 * @param reference Object referencing current action like NPC selling item or previous item in transformation
 	 * @return L2ItemInstance corresponding to the new item or the updated item in inventory
@@ -680,12 +696,15 @@ public class L2PetInstance extends L2Summon
 		L2ItemInstance playerOldItem = target.getItemByItemId(oldItem.getItemId());
 		L2ItemInstance newItem = getInventory().transferItem(process, objectId, count, target, actor, reference);
 		
-		if (newItem == null) return null;
+		if (newItem == null)
+			return null;
 		
 		// Send inventory update packet
 		PetInventoryUpdate petIU = new PetInventoryUpdate();
-		if (oldItem.getCount() > 0 && oldItem != newItem) petIU.addModifiedItem(oldItem);
-		else petIU.addRemovedItem(oldItem);
+		if (oldItem.getCount() > 0 && oldItem != newItem)
+			petIU.addModifiedItem(oldItem);
+		else
+			petIU.addRemovedItem(oldItem);
 		sendPacket(petIU);
 		
 		// Send target update packet
@@ -708,7 +727,7 @@ public class L2PetInstance extends L2Summon
 	/**
 	 * Remove the Pet from DB and its associated item from the player inventory
 	 * @param owner The owner from whose inventory we should delete the item
-	 * @param evolve 
+	 * @param evolve
 	 */
 	public void destroyControlItem(L2PcInstance owner, boolean evolve)
 	{
@@ -735,7 +754,7 @@ public class L2PetInstance extends L2Summon
 			}
 			
 			if (removedItem == null)
-				_log.warning("Couldn't destroy pet control item for "+owner+" pet: "+this+" evolve: "+evolve);
+				_log.warning("Couldn't destroy pet control item for " + owner + " pet: " + this + " evolve: " + evolve);
 			else
 			{
 				InventoryUpdate iu = new InventoryUpdate();
@@ -752,7 +771,8 @@ public class L2PetInstance extends L2Summon
 				L2World.getInstance().removeObject(removedItem);
 			}
 		}
-		catch (Exception e){
+		catch (Exception e)
+		{
 			_logPet.log(Level.WARNING, "Error while destroying control item: " + e.getMessage(), e);
 		}
 		
@@ -768,7 +788,7 @@ public class L2PetInstance extends L2Summon
 		}
 		catch (Exception e)
 		{
-			_logPet.log(Level.SEVERE, "Failed to delete Pet [ObjectId: "+getObjectId()+"]", e);
+			_logPet.log(Level.SEVERE, "Failed to delete Pet [ObjectId: " + getObjectId() + "]", e);
 		}
 		finally
 		{
@@ -780,12 +800,12 @@ public class L2PetInstance extends L2Summon
 	{
 		try
 		{
-			for (L2ItemInstance item: getInventory().getItems())
+			for (L2ItemInstance item : getInventory().getItems())
 			{
 				dropItemHere(item);
 			}
 		}
-		catch(Exception e)
+		catch (Exception e)
 		{
 			_logPet.log(Level.WARNING, "Pet Drop Error: " + e.getMessage(), e);
 		}
@@ -799,8 +819,8 @@ public class L2PetInstance extends L2Summon
 		{
 			if (protect)
 				dropit.getDropProtection().protect(getOwner());
-			_logPet.finer("Item id to drop: "+dropit.getItemId()+" amount: "+dropit.getCount());
-			dropit.dropMe(this, getX(), getY(), getZ()+100);
+			_logPet.finer("Item id to drop: " + dropit.getItemId() + " amount: " + dropit.getCount());
+			dropit.dropMe(this, getX(), getY(), getZ() + 100);
 		}
 	}
 	
@@ -808,10 +828,13 @@ public class L2PetInstance extends L2Summon
 	{
 		dropItemHere(dropit, false);
 	}
-
+	
 	/** @return Returns the mount able. */
 	@Override
-	public boolean isMountable() { return _mountable; }
+	public boolean isMountable()
+	{
+		return _mountable;
+	}
 	
 	private static L2PetInstance restore(L2ItemInstance control, L2NpcTemplate template, L2PcInstance owner)
 	{
@@ -850,7 +873,7 @@ public class L2PetInstance extends L2Summon
 			// Avoiding pet delevels due to exp per level values changed.
 			if (info != null && exp < info.getPetMaxExp())
 				exp = info.getPetMaxExp();
-
+			
 			pet.getStat().setExp(exp);
 			pet.getStat().setSp(rset.getInt("sp"));
 			
@@ -871,7 +894,7 @@ public class L2PetInstance extends L2Summon
 		}
 		catch (Exception e)
 		{
-			_logPet.log(Level.WARNING, "Could not restore pet data for owner: "+owner+" - "+ e.getMessage(), e);
+			_logPet.log(Level.WARNING, "Could not restore pet data for owner: " + owner + " - " + e.getMessage(), e);
 			return null;
 		}
 		finally
@@ -915,11 +938,9 @@ public class L2PetInstance extends L2Summon
 		
 		String req;
 		if (!isRespawned())
-			req = "INSERT INTO pets (name,level,curHp,curMp,exp,sp,fed,ownerId,restore,item_obj_id) "+
-			"VALUES (?,?,?,?,?,?,?,?,?,?)";
+			req = "INSERT INTO pets (name,level,curHp,curMp,exp,sp,fed,ownerId,restore,item_obj_id) " + "VALUES (?,?,?,?,?,?,?,?,?,?)";
 		else
-			req = "UPDATE pets SET name=?,level=?,curHp=?,curMp=?,exp=?,sp=?,fed=?,ownerId=?,restore=? "+
-			"WHERE item_obj_id = ?";
+			req = "UPDATE pets SET name=?,level=?,curHp=?,curMp=?,exp=?,sp=?,fed=?,ownerId=?,restore=? " + "WHERE item_obj_id = ?";
 		Connection con = null;
 		try
 		{
@@ -947,7 +968,7 @@ public class L2PetInstance extends L2Summon
 		}
 		catch (Exception e)
 		{
-			_logPet.log(Level.SEVERE, "Failed to store Pet [ObjectId: "+getObjectId()+"] data", e);
+			_logPet.log(Level.SEVERE, "Failed to store Pet [ObjectId: " + getObjectId() + "] data", e);
 		}
 		finally
 		{
@@ -988,7 +1009,7 @@ public class L2PetInstance extends L2Summon
 			
 			final List<Integer> storedSkills = new FastList<Integer>();
 			
-			//Store all effect data along with calculated remaining
+			// Store all effect data along with calculated remaining
 			statement = con.prepareStatement(ADD_SKILL_SAVE);
 			
 			if (storeEffects)
@@ -1025,7 +1046,7 @@ public class L2PetInstance extends L2Summon
 						
 						if (!SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
 							SummonEffectsTable.getInstance().getPetEffects().put(getControlObjectId(), new FastList<SummonEffect>());
-
+						
 						SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effect.getCount(), effect.getTime()));
 					}
 				}
@@ -1050,7 +1071,7 @@ public class L2PetInstance extends L2Summon
 		try
 		{
 			con = L2DatabaseFactory.getInstance().getConnection();
-
+			
 			if (!SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
 			{
 				statement = con.prepareStatement(RESTORE_SKILL_SAVE);
@@ -1093,7 +1114,7 @@ public class L2PetInstance extends L2Summon
 			
 			if (SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()) == null)
 				return;
-
+			
 			for (SummonEffect se : SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()))
 			{
 				Env env = new Env();
@@ -1121,7 +1142,8 @@ public class L2PetInstance extends L2Summon
 		{
 			_feedTask.cancel(false);
 			_feedTask = null;
-			if (Config.DEBUG) _logPet.fine("Pet [#"+getObjectId()+"] feed task stop");
+			if (Config.DEBUG)
+				_logPet.fine("Pet [#" + getObjectId() + "] feed task stop");
 		}
 	}
 	
@@ -1137,13 +1159,13 @@ public class L2PetInstance extends L2Summon
 	}
 	
 	@Override
-	public synchronized void unSummon (L2PcInstance owner)
+	public synchronized void unSummon(L2PcInstance owner)
 	{
 		stopFeed();
 		stopHpMpRegeneration();
 		super.unSummon(owner);
 		
-		if(!isDead())
+		if (!isDead())
 		{
 			if (getInventory() != null)
 				getInventory().deleteMe();
@@ -1152,8 +1174,9 @@ public class L2PetInstance extends L2Summon
 	}
 	
 	/**
-	 * Restore the specified % of experience this L2PetInstance has lost.<BR><BR>
-	 * @param restorePercent 
+	 * Restore the specified % of experience this L2PetInstance has lost.<BR>
+	 * <BR>
+	 * @param restorePercent
 	 */
 	public void restoreExp(double restorePercent)
 	{
@@ -1165,7 +1188,6 @@ public class L2PetInstance extends L2Summon
 		}
 	}
 	
-	
 	private void deathPenalty()
 	{
 		// TODO Need Correct Penalty
@@ -1174,7 +1196,7 @@ public class L2PetInstance extends L2Summon
 		double percentLost = -0.07 * lvl + 6.5;
 		
 		// Calculate the Experience loss
-		long lostExp = Math.round((getStat().getExpForLevel(lvl+1) - getStat().getExpForLevel(lvl)) * percentLost /100);
+		long lostExp = Math.round((getStat().getExpForLevel(lvl + 1) - getStat().getExpForLevel(lvl)) * percentLost / 100);
 		
 		// Get the Experience before applying penalty
 		_expBeforeDeath = getStat().getExp();
@@ -1186,25 +1208,52 @@ public class L2PetInstance extends L2Summon
 	@Override
 	public void addExpAndSp(long addToExp, int addToSp)
 	{
-		if (getNpcId() == 12564) //SinEater
+		if (getNpcId() == 12564) // SinEater
 			getStat().addExpAndSp(Math.round(addToExp * Config.SINEATER_XP_RATE), addToSp);
 		else
 			getStat().addExpAndSp(Math.round(addToExp * Config.PET_XP_RATE), addToSp);
 	}
 	
 	@Override
-	public long getExpForThisLevel() { return getStat().getExpForLevel(getLevel()); }
+	public long getExpForThisLevel()
+	{
+		return getStat().getExpForLevel(getLevel());
+	}
+	
 	@Override
-	public long getExpForNextLevel() { return getStat().getExpForLevel(getLevel() + 1); }
+	public long getExpForNextLevel()
+	{
+		return getStat().getExpForLevel(getLevel() + 1);
+	}
+	
 	@Override
-	public final int getLevel() { return getStat().getLevel(); }
-	public int getMaxFed() { return getStat().getMaxFeed(); }
+	public final int getLevel()
+	{
+		return getStat().getLevel();
+	}
+	
+	public int getMaxFed()
+	{
+		return getStat().getMaxFeed();
+	}
+	
 	@Override
-	public int getCriticalHit(L2Character target, L2Skill skill) { return getStat().getCriticalHit(target, skill); }
+	public int getCriticalHit(L2Character target, L2Skill skill)
+	{
+		return getStat().getCriticalHit(target, skill);
+	}
+	
 	@Override
-	public int getMAtk(L2Character target, L2Skill skill) { return getStat().getMAtk(target, skill); }
+	public int getMAtk(L2Character target, L2Skill skill)
+	{
+		return getStat().getMAtk(target, skill);
+	}
+	
 	@Override
-	public int getMDef(L2Character target, L2Skill skill) { return getStat().getMDef(target, skill); }
+	public int getMDef(L2Character target, L2Skill skill)
+	{
+		return getStat().getMDef(target, skill);
+	}
 	
 	@Override
 	public final int getSkillLevel(int skillId)
@@ -1247,7 +1296,7 @@ public class L2PetInstance extends L2Summon
 		if (maxLoad > 0)
 		{
 			int weightproc = getCurrentLoad() * 1000 / maxLoad;
-			weightproc*=(int)calcStat(Stats.WEIGHT_LIMIT, 1, this, null);
+			weightproc *= (int) calcStat(Stats.WEIGHT_LIMIT, 1, this, null);
 			int newWeightPenalty;
 			if (weightproc < 500 || getOwner().getDietMode())
 			{
@@ -1257,7 +1306,7 @@ public class L2PetInstance extends L2Summon
 			{
 				newWeightPenalty = 1;
 			}
-			else if ( weightproc < 800)
+			else if (weightproc < 800)
 			{
 				newWeightPenalty = 2;
 			}
@@ -1275,7 +1324,7 @@ public class L2PetInstance extends L2Summon
 				_curWeightPenalty = newWeightPenalty;
 				if (newWeightPenalty > 0)
 				{
-					addSkill(SkillTable.getInstance().getInfo(4270,newWeightPenalty));
+					addSkill(SkillTable.getInstance().getInfo(4270, newWeightPenalty));
 					setIsOverloaded(getCurrentLoad() >= maxLoad);
 				}
 				else
@@ -1342,10 +1391,10 @@ public class L2PetInstance extends L2Summon
 	public void setName(String name)
 	{
 		L2ItemInstance controlItem = getControlItem();
-		if (getControlItem().getCustomType2() == (name == null ? 1 : 0 ))
+		if (getControlItem().getCustomType2() == (name == null ? 1 : 0))
 		{
 			// name not set yet
-			controlItem.setCustomType2(name != null ? 1 : 0 );
+			controlItem.setCustomType2(name != null ? 1 : 0);
 			controlItem.updateDatabase();
 			InventoryUpdate iu = new InventoryUpdate();
 			iu.addModifiedItem(controlItem);
@@ -1353,7 +1402,7 @@ public class L2PetInstance extends L2Summon
 		}
 		super.setName(name);
 	}
-
+	
 	@Override
 	protected void broadcastModifiedStats(List<Stats> stats)
 	{

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java

@@ -37,6 +37,7 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 import com.l2jserver.gameserver.scripting.scriptengine.events.PlayerLevelChangeEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerLevelListener;
+import com.l2jserver.gameserver.util.Util;
 
 public class PcStat extends PlayableStat
 {	
@@ -129,9 +130,8 @@ public class PcStat extends PlayableStat
 		
 		float ratioTakenByPlayer = 0;
 		
-		// if this player has a pet that takes from the owner's Exp, give the pet Exp now
-		
-		if (activeChar.getPet() instanceof L2PetInstance)
+		// if this player has a pet and it is in his range he takes from the owner's Exp, give the pet Exp now
+		if (activeChar.hasPet() && activeChar.getPet().isPet() && Util.checkIfInShortRadius(Config.ALT_PARTY_RANGE, activeChar, activeChar.getPet(), false))
 		{
 			L2PetInstance pet = (L2PetInstance) activeChar.getPet();
 			ratioTakenByPlayer = pet.getPetLevelData().getOwnerExpTaken() / 100f;