Browse Source

BETA: Continuing with RequestActionUse improvements:
* Cleanup of unnecessary code.
* Added/fixed JavaDocs.
* Removed custom check for summons not being able to use skills while master is in shop mode.
* Removed ''spammy'' log for missing skills in summons, it comes from skill shortcuts in shortcut bar from different summon that current one.
* Removed custom/hard-coded system messages.
* Added missing next action for player requesting a couple action while casting.
* System message is sent right away but action is performed after previous action is finished.
* Added missing next action for player requesting a couple action while moving.
* System message is sent right away but action is performed after previous action is finished.
* Ordered actions Ids.
* Validated all pet actions.
* Validated all servitors actions.
* Fixed typo in system message when trying to unsummon a servitor.
* Added missing system messages for pets and servitors.
* Removed more unnecessary code.
* Fixed exploit with passive summons using Attack action.
* Removed unnecessary methods.
* Added useful methods.
* Implemented Sin Eater NpcStrings for Ultimate Bombastic Buster.
* Renaming misleading getPet() method to getSummon(), since it returns the summon, which could be either a pet or a servitor.
* Renaming misleading hasPet() method to hasSummon(), since it returns the true, either the player has pet or a servitor.
* Replacing getPet() != null with hasSummon() and getPet() == null with !hasSummon().
* Added missing check that would allow players to exploit the rename pet feature.

Reported by: darknessneo, Opiam, Zoey76, valdaron

Zoey76 12 years ago
parent
commit
b8ac0ed9f8
51 changed files with 779 additions and 708 deletions
  1. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/AbstractAI.java
  2. 22 22
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/CharSummonTable.java
  3. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java
  4. 11 14
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Party.java
  5. 4 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
  6. 9 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  7. 182 56
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Summon.java
  8. 10 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2BabyPetInstance.java
  9. 16 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CubicInstance.java
  10. 0 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DoorInstance.java
  11. 2 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java
  12. 65 69
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  13. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
  14. 1 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PetManagerInstance.java
  15. 0 12
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SiegeSummonInstance.java
  16. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java
  17. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java
  18. 5 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/PcStatus.java
  19. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasPet.java
  20. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerServitorNpcId.java
  21. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/effects/L2Effect.java
  22. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/BlockCheckerEngine.java
  23. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java
  24. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/TvTEventTeleporter.java
  25. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java
  26. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/olympiad/AbstractOlympiadGame.java
  27. 2 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2Skill.java
  28. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillCreateItem.java
  29. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillDecoy.java
  30. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillMount.java
  31. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillSummon.java
  32. 2 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2OlympiadStadiumZone.java
  33. 7 7
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/L2GameClient.java
  34. 29 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/SystemMessageId.java
  35. 15 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/L2GameClientPacket.java
  36. 305 353
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java
  37. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAutoSoulShot.java
  38. 13 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestChangePetName.java
  39. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDestroyItem.java
  40. 2 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDispel.java
  41. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestGetItemFromPet.java
  42. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestGiveItemToPet.java
  43. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java
  44. 8 15
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestPetGetItem.java
  45. 3 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java
  46. 10 10
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PartySmallWindowAll.java
  47. 5 7
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PetItemList.java
  48. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SellList.java
  49. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/taskmanager/AttackStanceTaskManager.java
  50. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java
  51. 2 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/Evolve.java

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/AbstractAI.java

@@ -689,9 +689,9 @@ public abstract class AbstractAI implements Ctrl
 		}
 		}
 		if (!isAutoAttacking())
 		if (!isAutoAttacking())
 		{
 		{
-			if ((_actor instanceof L2PcInstance) && (((L2PcInstance) _actor).getPet() != null))
+			if ((_actor instanceof L2PcInstance) && ((L2PcInstance) _actor).hasSummon())
 			{
 			{
-				((L2PcInstance) _actor).getPet().broadcastPacket(new AutoAttackStart(((L2PcInstance) _actor).getPet().getObjectId()));
+				_actor.getSummon().broadcastPacket(new AutoAttackStart(_actor.getSummon().getObjectId()));
 			}
 			}
 			// Send a Server->Client packet AutoAttackStart to the actor and all L2PcInstance in its _knownPlayers
 			// Send a Server->Client packet AutoAttackStart to the actor and all L2PcInstance in its _knownPlayers
 			_actor.broadcastPacket(new AutoAttackStart(_actor.getObjectId()));
 			_actor.broadcastPacket(new AutoAttackStart(_actor.getObjectId()));

+ 22 - 22
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/CharSummonTable.java

@@ -245,49 +245,49 @@ public class CharSummonTable
 			return;
 			return;
 		}
 		}
 		
 		
-		final L2PetInstance petSummon = L2PetInstance.spawnPet(npcTemplate, activeChar, item);
-		if (petSummon == null)
+		final L2PetInstance pet = L2PetInstance.spawnPet(npcTemplate, activeChar, item);
+		if (pet == null)
 		{
 		{
 			return;
 			return;
 		}
 		}
 		
 		
-		petSummon.setShowSummonAnimation(true);
-		petSummon.setTitle(activeChar.getName());
+		pet.setShowSummonAnimation(true);
+		pet.setTitle(activeChar.getName());
 		
 		
-		if (!petSummon.isRespawned())
+		if (!pet.isRespawned())
 		{
 		{
-			petSummon.setCurrentHp(petSummon.getMaxHp());
-			petSummon.setCurrentMp(petSummon.getMaxMp());
-			petSummon.getStat().setExp(petSummon.getExpForThisLevel());
-			petSummon.setCurrentFed(petSummon.getMaxFed());
+			pet.setCurrentHp(pet.getMaxHp());
+			pet.setCurrentMp(pet.getMaxMp());
+			pet.getStat().setExp(pet.getExpForThisLevel());
+			pet.setCurrentFed(pet.getMaxFed());
 		}
 		}
 		
 		
-		petSummon.setRunning();
+		pet.setRunning();
 		
 		
-		if (!petSummon.isRespawned())
+		if (!pet.isRespawned())
 		{
 		{
-			petSummon.store();
+			pet.store();
 		}
 		}
 		
 		
-		activeChar.setPet(petSummon);
+		activeChar.setPet(pet);
 		
 		
-		petSummon.spawnMe(activeChar.getX() + 50, activeChar.getY() + 100, activeChar.getZ());
-		petSummon.startFeed();
-		item.setEnchantLevel(petSummon.getLevel());
+		pet.spawnMe(activeChar.getX() + 50, activeChar.getY() + 100, activeChar.getZ());
+		pet.startFeed();
+		item.setEnchantLevel(pet.getLevel());
 		
 		
-		if (petSummon.getCurrentFed() <= 0)
+		if (pet.getCurrentFed() <= 0)
 		{
 		{
-			petSummon.unSummon(activeChar);
+			pet.unSummon(activeChar);
 		}
 		}
 		else
 		else
 		{
 		{
-			petSummon.startFeed();
+			pet.startFeed();
 		}
 		}
 		
 		
-		petSummon.setFollowStatus(true);
+		pet.setFollowStatus(true);
 		
 		
-		petSummon.getOwner().sendPacket(new PetItemList(petSummon));
-		petSummon.broadcastStatusUpdate();
+		pet.getOwner().sendPacket(new PetItemList(pet.getInventory().getItems()));
+		pet.broadcastStatusUpdate();
 	}
 	}
 	
 	
 	private static class SingletonHolder
 	private static class SingletonHolder

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -385,9 +385,9 @@ public abstract class L2Object
 				}
 				}
 			}
 			}
 			
 			
-			if (player.getPet() != null)
+			if (player.hasSummon())
 			{
 			{
-				player.getPet().setInstanceId(instanceId);
+				player.getSummon().setInstanceId(instanceId);
 			}
 			}
 		}
 		}
 		else if (isNpc())
 		else if (isNpc())

+ 11 - 14
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Party.java

@@ -360,12 +360,11 @@ public class L2Party extends AbstractPlayerGroup
 		player.sendPacket(new PartySmallWindowAll(player, this));
 		player.sendPacket(new PartySmallWindowAll(player, this));
 		
 		
 		// sends pets/summons of party members
 		// sends pets/summons of party members
-		L2Summon summon;
 		for (L2PcInstance pMember : getMembers())
 		for (L2PcInstance pMember : getMembers())
 		{
 		{
-			if ((pMember != null) && ((summon = pMember.getPet()) != null))
+			if ((pMember != null) && pMember.hasSummon())
 			{
 			{
-				player.sendPacket(new ExPartyPetWindowAdd(summon));
+				player.sendPacket(new ExPartyPetWindowAdd(pMember.getSummon()));
 			}
 			}
 		}
 		}
 		
 		
@@ -383,9 +382,9 @@ public class L2Party extends AbstractPlayerGroup
 		// broadcastToPartyMembers(player, new PartyMemberPosition(this));
 		// broadcastToPartyMembers(player, new PartyMemberPosition(this));
 		
 		
 		// if member has pet/summon add it to other as well
 		// if member has pet/summon add it to other as well
-		if (player.getPet() != null)
+		if (player.hasSummon())
 		{
 		{
-			broadcastPacket(new ExPartyPetWindowAdd(player.getPet()));
+			broadcastPacket(new ExPartyPetWindowAdd(player.getSummon()));
 		}
 		}
 		
 		
 		// add player to party, adjust party level
 		// add player to party, adjust party level
@@ -396,12 +395,13 @@ public class L2Party extends AbstractPlayerGroup
 		}
 		}
 		
 		
 		// update partySpelled
 		// update partySpelled
+		L2Summon summon;
 		for (L2PcInstance member : getMembers())
 		for (L2PcInstance member : getMembers())
 		{
 		{
 			if (member != null)
 			if (member != null)
 			{
 			{
 				member.updateEffectIcons(true); // update party icons only
 				member.updateEffectIcons(true); // update party icons only
-				summon = member.getPet();
+				summon = member.getSummon();
 				member.broadcastUserInfo();
 				member.broadcastUserInfo();
 				if (summon != null)
 				if (summon != null)
 				{
 				{
@@ -509,10 +509,9 @@ public class L2Party extends AbstractPlayerGroup
 			player.sendPacket(PartySmallWindowDeleteAll.STATIC_PACKET);
 			player.sendPacket(PartySmallWindowDeleteAll.STATIC_PACKET);
 			player.setParty(null);
 			player.setParty(null);
 			broadcastPacket(new PartySmallWindowDelete(player));
 			broadcastPacket(new PartySmallWindowDelete(player));
-			final L2Summon summon = player.getPet();
-			if (summon != null)
+			if (player.hasSummon())
 			{
 			{
-				broadcastPacket(new ExPartyPetWindowDelete(summon));
+				broadcastPacket(new ExPartyPetWindowDelete(player.getSummon()));
 			}
 			}
 			
 			
 			if (isInDimensionalRift())
 			if (isInDimensionalRift())
@@ -793,7 +792,6 @@ public class L2Party extends AbstractPlayerGroup
 	 */
 	 */
 	public void distributeXpAndSp(long xpReward, int spReward, List<L2Playable> rewardedMembers, int topLvl, int partyDmg, L2Attackable target)
 	public void distributeXpAndSp(long xpReward, int spReward, List<L2Playable> rewardedMembers, int topLvl, int partyDmg, L2Attackable target)
 	{
 	{
-		L2ServitorInstance summon = null;
 		List<L2Playable> validMembers = getValidMembers(rewardedMembers, topLvl);
 		List<L2Playable> validMembers = getValidMembers(rewardedMembers, topLvl);
 		
 		
 		float penalty;
 		float penalty;
@@ -824,11 +822,10 @@ public class L2Party extends AbstractPlayerGroup
 				
 				
 				penalty = 0;
 				penalty = 0;
 				
 				
-				// The L2ServitorInstance penalty
-				if (member.getPet() instanceof L2ServitorInstance)
+				// The servitor penalty
+				if ((member.getSummon() != null) && member.getSummon().isServitor())
 				{
 				{
-					summon = (L2ServitorInstance) member.getPet();
-					penalty = summon.getExpPenalty();
+					penalty = ((L2ServitorInstance) member.getSummon()).getExpPenalty();
 				}
 				}
 				// Pets that leech xp from the owner (like babypets) do not get rewarded directly
 				// Pets that leech xp from the owner (like babypets) do not get rewarded directly
 				if (member instanceof L2PetInstance)
 				if (member instanceof L2PetInstance)

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

@@ -742,9 +742,9 @@ public class L2Attackable extends L2Npc
 					}
 					}
 					
 					
 					// If this attacker is a L2PcInstance with a summoned L2ServitorInstance, get Exp Penalty applied for the current summoned L2SummonInstance
 					// If this attacker is a L2PcInstance with a summoned L2ServitorInstance, get Exp Penalty applied for the current summoned L2SummonInstance
-					if ((attacker instanceof L2PcInstance) && (((L2PcInstance) attacker).getPet() instanceof L2ServitorInstance))
+					if ((attacker instanceof L2PcInstance) && (((L2PcInstance) attacker).getSummon() instanceof L2ServitorInstance))
 					{
 					{
-						penalty = ((L2ServitorInstance) ((L2PcInstance) attacker).getPet()).getExpPenalty();
+						penalty = ((L2ServitorInstance) ((L2PcInstance) attacker).getSummon()).getExpPenalty();
 					}
 					}
 					
 					
 					// We must avoid "over damage", if any
 					// We must avoid "over damage", if any
@@ -890,12 +890,11 @@ public class L2Attackable extends L2Npc
 									}
 									}
 								}
 								}
 							}
 							}
-							L2Playable summon = pl.getPet();
 							
 							
-							if ((summon != null) && summon.isPet())
+							if (pl.hasSummon() && pl.getSummon().isPet())
 							{
 							{
+								final L2Summon summon = pl.getSummon();
 								reward2 = rewards.get(summon);
 								reward2 = rewards.get(summon);
-								
 								if (reward2 != null) // Pets are only added if they have done damage
 								if (reward2 != null) // Pets are only added if they have done damage
 								{
 								{
 									if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, this, summon, true))
 									if (Util.checkIfInRange(Config.ALT_PARTY_RANGE, this, summon, true))

+ 9 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -1124,7 +1124,7 @@ public abstract class L2Character extends L2Object
 		
 		
 		if (player != null)
 		if (player != null)
 		{
 		{
-			if (player.getPet() != target)
+			if (player.getSummon() != target)
 			{
 			{
 				player.updatePvPStatus(target);
 				player.updatePvPStatus(target);
 			}
 			}
@@ -1683,7 +1683,7 @@ public abstract class L2Character extends L2Object
 		switch (skill.getTargetType())
 		switch (skill.getTargetType())
 		{
 		{
 			case TARGET_AREA_SUMMON: // We need it to correct facing
 			case TARGET_AREA_SUMMON: // We need it to correct facing
-				target = getPet();
+				target = getSummon();
 				break;
 				break;
 			case TARGET_AURA:
 			case TARGET_AURA:
 			case TARGET_AURA_CORPSE_MOB:
 			case TARGET_AURA_CORPSE_MOB:
@@ -2738,9 +2738,9 @@ public abstract class L2Character extends L2Object
 	}
 	}
 	
 	
 	/**
 	/**
-	 * @return the L2Summon of the L2Character.
+	 * @return the summon
 	 */
 	 */
-	public L2Summon getPet()
+	public L2Summon getSummon()
 	{
 	{
 		return null;
 		return null;
 	}
 	}
@@ -4334,9 +4334,9 @@ public abstract class L2Character extends L2Object
 					broadcastPacket(su);
 					broadcastPacket(su);
 				}
 				}
 			}
 			}
-			if ((getPet() != null) && isAffected(CharEffectList.EFFECT_FLAG_SERVITOR_SHARE))
+			if ((getSummon() != null) && isAffected(CharEffectList.EFFECT_FLAG_SERVITOR_SHARE))
 			{
 			{
-				getPet().broadcastStatusUpdate();
+				getSummon().broadcastStatusUpdate();
 			}
 			}
 		}
 		}
 		else if (isNpc())
 		else if (isNpc())
@@ -6239,9 +6239,9 @@ public abstract class L2Character extends L2Object
 			{
 			{
 				removeChanceSkill(oldSkill.getId());
 				removeChanceSkill(oldSkill.getId());
 			}
 			}
-			if ((oldSkill instanceof L2SkillSummon) && (oldSkill.getId() == 710) && isPlayer() && (getActingPlayer().getPet() != null) && (getActingPlayer().getPet().getNpcId() == 14870))
+			if ((oldSkill instanceof L2SkillSummon) && (oldSkill.getId() == 710) && isPlayer() && getActingPlayer().hasSummon() && (getActingPlayer().getSummon().getNpcId() == 14870))
 			{
 			{
-				getActingPlayer().getPet().unSummon(getActingPlayer());
+				getActingPlayer().getSummon().unSummon(getActingPlayer());
 			}
 			}
 		}
 		}
 		
 		
@@ -7084,7 +7084,7 @@ public abstract class L2Character extends L2Object
 									}
 									}
 									// attack of the own pet does not flag player
 									// attack of the own pet does not flag player
 									// triggering trap not flag trap owner
 									// triggering trap not flag trap owner
-									if ((player.getPet() != target) && !isTrap())
+									if ((player.getSummon() != target) && !isTrap())
 									{
 									{
 										player.updatePvPStatus((L2Character) target);
 										player.updatePvPStatus((L2Character) target);
 									}
 									}

+ 182 - 56
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Summon.java

@@ -14,9 +14,8 @@
  */
  */
 package com.l2jserver.gameserver.model.actor;
 package com.l2jserver.gameserver.model.actor;
 
 
-import java.util.Collection;
-
 import com.l2jserver.Config;
 import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.ai.L2CharacterAI;
 import com.l2jserver.gameserver.ai.L2CharacterAI;
 import com.l2jserver.gameserver.ai.L2SummonAI;
 import com.l2jserver.gameserver.ai.L2SummonAI;
@@ -30,12 +29,10 @@ import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2WorldRegion;
 import com.l2jserver.gameserver.model.L2WorldRegion;
 import com.l2jserver.gameserver.model.ShotType;
 import com.l2jserver.gameserver.model.ShotType;
 import com.l2jserver.gameserver.model.actor.L2Attackable.AggroInfo;
 import com.l2jserver.gameserver.model.actor.L2Attackable.AggroInfo;
-import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2MerchantSummonInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2MerchantSummonInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
 import com.l2jserver.gameserver.model.actor.knownlist.SummonKnownList;
 import com.l2jserver.gameserver.model.actor.knownlist.SummonKnownList;
 import com.l2jserver.gameserver.model.actor.stat.SummonStat;
 import com.l2jserver.gameserver.model.actor.stat.SummonStat;
 import com.l2jserver.gameserver.model.actor.status.SummonStatus;
 import com.l2jserver.gameserver.model.actor.status.SummonStatus;
@@ -50,7 +47,7 @@ import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo;
+import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo.SummonInfo;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExPartyPetWindowAdd;
 import com.l2jserver.gameserver.network.serverpackets.ExPartyPetWindowAdd;
 import com.l2jserver.gameserver.network.serverpackets.ExPartyPetWindowDelete;
 import com.l2jserver.gameserver.network.serverpackets.ExPartyPetWindowDelete;
@@ -64,6 +61,7 @@ import com.l2jserver.gameserver.network.serverpackets.RelationChanged;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
 import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
 import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
 import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
+import com.l2jserver.gameserver.util.Util;
 
 
 public abstract class L2Summon extends L2Playable
 public abstract class L2Summon extends L2Playable
 {
 {
@@ -73,19 +71,25 @@ public abstract class L2Summon extends L2Playable
 	private boolean _previousFollowStatus = true;
 	private boolean _previousFollowStatus = true;
 	
 	
 	// /!\ BLACK MAGIC /!\
 	// /!\ BLACK MAGIC /!\
-	// we dont have walk speed in pet data so for now use runspd / 3
+	// We don't have walk speed in pet data so for now use run speed / 3
 	public static final int WALK_SPEED_MULTIPLIER = 3;
 	public static final int WALK_SPEED_MULTIPLIER = 3;
 	
 	
 	public boolean _restoreSummon = true;
 	public boolean _restoreSummon = true;
 	
 	
 	private int _shotsMask = 0;
 	private int _shotsMask = 0;
 	
 	
+	// TODO: Unhardcode
+	// @formatter:off
+	private static final int[] PASSIVE_SUMMONS =
+	{
+		12564, 12621, 14702, 14703, 14704, 14705, 14706, 14707, 14708, 14709, 14710, 14711,
+		14712, 14713, 14714, 14715, 14716, 14717, 14718, 14719, 14720, 14721, 14722, 14723,
+		14724, 14725, 14726, 14727, 14728, 14729, 14730, 14731, 14732, 14733, 14734, 14735, 14736
+	};
+	// @formatter:on
+	
 	public class AIAccessor extends L2Character.AIAccessor
 	public class AIAccessor extends L2Character.AIAccessor
 	{
 	{
-		protected AIAccessor()
-		{
-		}
-		
 		public L2Summon getSummon()
 		public L2Summon getSummon()
 		{
 		{
 			return L2Summon.this;
 			return L2Summon.this;
@@ -141,7 +145,7 @@ public abstract class L2Summon extends L2Playable
 			}
 			}
 		}
 		}
 		setShowSummonAnimation(false); // addVisibleObject created the info packets with summon animation
 		setShowSummonAnimation(false); // addVisibleObject created the info packets with summon animation
-		// if someone comes into range now, the animation shouldnt show any more
+		// if someone comes into range now, the animation shouldn't show any more
 		_restoreSummon = false;
 		_restoreSummon = false;
 	}
 	}
 	
 	
@@ -225,10 +229,9 @@ public abstract class L2Summon extends L2Playable
 	@Override
 	@Override
 	public void updateAbnormalEffect()
 	public void updateAbnormalEffect()
 	{
 	{
-		Collection<L2PcInstance> plrs = getKnownList().getKnownPlayers().values();
-		for (L2PcInstance player : plrs)
+		for (L2PcInstance player : getKnownList().getKnownPlayers().values())
 		{
 		{
-			player.sendPacket(new AbstractNpcInfo.SummonInfo(this, player, 1));
+			player.sendPacket(new SummonInfo(this, player, 1));
 		}
 		}
 	}
 	}
 	
 	
@@ -292,7 +295,6 @@ public abstract class L2Summon extends L2Playable
 		{
 		{
 			return (short) getTemplate().getAIDataStatic().getSoulShot();
 			return (short) getTemplate().getAIDataStatic().getSoulShot();
 		}
 		}
-		
 		return 1;
 		return 1;
 	}
 	}
 	
 	
@@ -302,7 +304,6 @@ public abstract class L2Summon extends L2Playable
 		{
 		{
 			return (short) getTemplate().getAIDataStatic().getSpiritShot();
 			return (short) getTemplate().getAIDataStatic().getSpiritShot();
 		}
 		}
-		
 		return 1;
 		return 1;
 	}
 	}
 	
 	
@@ -336,8 +337,7 @@ public abstract class L2Summon extends L2Playable
 		
 		
 		if (owner != null)
 		if (owner != null)
 		{
 		{
-			Collection<L2Character> KnownTarget = getKnownList().getKnownCharacters();
-			for (L2Character TgMob : KnownTarget)
+			for (L2Character TgMob : getKnownList().getKnownCharacters())
 			{
 			{
 				// get the mobs which have aggro on the this instance
 				// get the mobs which have aggro on the this instance
 				if (TgMob instanceof L2Attackable)
 				if (TgMob instanceof L2Attackable)
@@ -470,11 +470,7 @@ public abstract class L2Summon extends L2Playable
 	
 	
 	public void setAttackRange(int range)
 	public void setAttackRange(int range)
 	{
 	{
-		if (range < 36)
-		{
-			range = 36;
-		}
-		_attackRange = range;
+		_attackRange = (range < 36) ? 36 : range;
 	}
 	}
 	
 	
 	public void setFollowStatus(boolean state)
 	public void setFollowStatus(boolean state)
@@ -603,7 +599,8 @@ public abstract class L2Summon extends L2Playable
 	@Override
 	@Override
 	public boolean useMagic(L2Skill skill, boolean forceUse, boolean dontMove)
 	public boolean useMagic(L2Skill skill, boolean forceUse, boolean dontMove)
 	{
 	{
-		if ((skill == null) || isDead())
+		// Null skill, dead summon or null owner are reasons to prevent casting.
+		if ((skill == null) || isDead() || (getOwner() == null))
 		{
 		{
 			return false;
 			return false;
 		}
 		}
@@ -615,8 +612,6 @@ public abstract class L2Summon extends L2Playable
 			return false;
 			return false;
 		}
 		}
 		
 		
-		// ************************************* Check Casting in Progress *******************************************
-		
 		// If a skill is currently being used
 		// If a skill is currently being used
 		if (isCastingNow())
 		if (isCastingNow())
 		{
 		{
@@ -626,11 +621,8 @@ public abstract class L2Summon extends L2Playable
 		// Set current pet skill
 		// Set current pet skill
 		getOwner().setCurrentPetSkill(skill, forceUse, dontMove);
 		getOwner().setCurrentPetSkill(skill, forceUse, dontMove);
 		
 		
-		// ************************************* Check Target *******************************************
-		
 		// Get the target for the skill
 		// Get the target for the skill
 		L2Object target = null;
 		L2Object target = null;
-		
 		switch (skill.getTargetType())
 		switch (skill.getTargetType())
 		{
 		{
 		// OWNER_PET should be cast even if no target has been found
 		// OWNER_PET should be cast even if no target has been found
@@ -659,8 +651,6 @@ public abstract class L2Summon extends L2Playable
 			return false;
 			return false;
 		}
 		}
 		
 		
-		// ************************************* Check skill availability *******************************************
-		
 		// Check if this skill is enabled (e.g. reuse time)
 		// Check if this skill is enabled (e.g. reuse time)
 		if (isSkillDisabled(skill))
 		if (isSkillDisabled(skill))
 		{
 		{
@@ -668,8 +658,6 @@ public abstract class L2Summon extends L2Playable
 			return false;
 			return false;
 		}
 		}
 		
 		
-		// ************************************* Check Consumables *******************************************
-		
 		// Check if the summon has enough MP
 		// Check if the summon has enough MP
 		if (getCurrentMp() < (getStat().getMpConsume(skill) + getStat().getMpInitialConsume(skill)))
 		if (getCurrentMp() < (getStat().getMpConsume(skill) + getStat().getMpInitialConsume(skill)))
 		{
 		{
@@ -686,28 +674,30 @@ public abstract class L2Summon extends L2Playable
 			return false;
 			return false;
 		}
 		}
 		
 		
-		// ************************************* Check Summon State *******************************************
-		
 		// Check if this is offensive magic skill
 		// Check if this is offensive magic skill
 		if (skill.isOffensive())
 		if (skill.isOffensive())
 		{
 		{
-			if (isInsidePeaceZone(this, target) && (getOwner() != null) && (!getOwner().getAccessLevel().allowPeaceAttack()))
+			if (getOwner() == target)
 			{
 			{
-				// If summon or target is in a peace zone, send a system message TARGET_IN_PEACEZONE
+				return false;
+			}
+			
+			if (isInsidePeaceZone(this, target) && !getOwner().getAccessLevel().allowPeaceAttack())
+			{
+				// If summon or target is in a peace zone, send a system message:
 				sendPacket(SystemMessageId.TARGET_IN_PEACEZONE);
 				sendPacket(SystemMessageId.TARGET_IN_PEACEZONE);
 				return false;
 				return false;
 			}
 			}
 			
 			
-			if ((getOwner() != null) && getOwner().isInOlympiadMode() && !getOwner().isOlympiadStart())
+			// If L2PcInstance is in Olympiad and the match isn't already start, send a Server->Client packet ActionFailed
+			if (getOwner().isInOlympiadMode() && !getOwner().isOlympiadStart())
 			{
 			{
-				// if L2PcInstance is in Olympia and the match isn't already start, send a Server->Client packet ActionFailed
 				sendPacket(ActionFailed.STATIC_PACKET);
 				sendPacket(ActionFailed.STATIC_PACKET);
 				return false;
 				return false;
 			}
 			}
 			
 			
 			if ((target.getActingPlayer() != null) && (getOwner().getSiegeState() > 0) && getOwner().isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getOwner().getSiegeState()) && (target.getActingPlayer() != getOwner()) && (target.getActingPlayer().getSiegeSide() == getOwner().getSiegeSide()))
 			if ((target.getActingPlayer() != null) && (getOwner().getSiegeState() > 0) && getOwner().isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeState() == getOwner().getSiegeState()) && (target.getActingPlayer() != getOwner()) && (target.getActingPlayer().getSiegeSide() == getOwner().getSiegeSide()))
 			{
 			{
-				//
 				if (TerritoryWarManager.getInstance().isTWInProgress())
 				if (TerritoryWarManager.getInstance().isTWInProgress())
 				{
 				{
 					sendPacket(SystemMessageId.YOU_CANNOT_ATTACK_A_MEMBER_OF_THE_SAME_TERRITORY);
 					sendPacket(SystemMessageId.YOU_CANNOT_ATTACK_A_MEMBER_OF_THE_SAME_TERRITORY);
@@ -721,21 +711,21 @@ public abstract class L2Summon extends L2Playable
 			}
 			}
 			
 			
 			// Check if the target is attackable
 			// Check if the target is attackable
-			if (target instanceof L2DoorInstance)
+			if (target.isDoor())
 			{
 			{
-				if (!((L2DoorInstance) target).isAttackable(getOwner()))
+				if (!target.isAutoAttackable(getOwner()))
 				{
 				{
 					return false;
 					return false;
 				}
 				}
 			}
 			}
 			else
 			else
 			{
 			{
-				if (!target.isAttackable() && (getOwner() != null) && (!getOwner().getAccessLevel().allowPeaceAttack()))
+				if (!target.isAttackable() && !getOwner().getAccessLevel().allowPeaceAttack())
 				{
 				{
 					return false;
 					return false;
 				}
 				}
 				
 				
-				// Check if a Forced ATTACK is in progress on non-attackable target
+				// Check if a Forced attack is in progress on non-attackable target
 				if (!target.isAutoAttackable(this) && !forceUse && (skill.getTargetType() != L2TargetType.TARGET_AURA) && (skill.getTargetType() != L2TargetType.TARGET_FRONT_AURA) && (skill.getTargetType() != L2TargetType.TARGET_BEHIND_AURA) && (skill.getTargetType() != L2TargetType.TARGET_CLAN) && (skill.getTargetType() != L2TargetType.TARGET_ALLY) && (skill.getTargetType() != L2TargetType.TARGET_PARTY) && (skill.getTargetType() != L2TargetType.TARGET_SELF))
 				if (!target.isAutoAttackable(this) && !forceUse && (skill.getTargetType() != L2TargetType.TARGET_AURA) && (skill.getTargetType() != L2TargetType.TARGET_FRONT_AURA) && (skill.getTargetType() != L2TargetType.TARGET_BEHIND_AURA) && (skill.getTargetType() != L2TargetType.TARGET_CLAN) && (skill.getTargetType() != L2TargetType.TARGET_ALLY) && (skill.getTargetType() != L2TargetType.TARGET_PARTY) && (skill.getTargetType() != L2TargetType.TARGET_SELF))
 				{
 				{
 					return false;
 					return false;
@@ -755,7 +745,7 @@ public abstract class L2Summon extends L2Playable
 		if (value)
 		if (value)
 		{
 		{
 			_previousFollowStatus = getFollowStatus();
 			_previousFollowStatus = getFollowStatus();
-			// if immobilized temporarly disable follow mode
+			// if immobilized temporarily disable follow mode
 			if (_previousFollowStatus)
 			if (_previousFollowStatus)
 			{
 			{
 				setFollowStatus(false);
 				setFollowStatus(false);
@@ -786,7 +776,7 @@ public abstract class L2Summon extends L2Playable
 		{
 		{
 			if (pcrit || mcrit)
 			if (pcrit || mcrit)
 			{
 			{
-				if (this instanceof L2ServitorInstance)
+				if (isServitor())
 				{
 				{
 					sendPacket(SystemMessageId.CRITICAL_HIT_BY_SUMMONED_MOB);
 					sendPacket(SystemMessageId.CRITICAL_HIT_BY_SUMMONED_MOB);
 				}
 				}
@@ -837,7 +827,6 @@ public abstract class L2Summon extends L2Playable
 	public void doCast(L2Skill skill)
 	public void doCast(L2Skill skill)
 	{
 	{
 		final L2PcInstance actingPlayer = getActingPlayer();
 		final L2PcInstance actingPlayer = getActingPlayer();
-		
 		if (!actingPlayer.checkPvpSkill(getTarget(), skill, true) && !actingPlayer.getAccessLevel().allowPeaceAttack())
 		if (!actingPlayer.checkPvpSkill(getTarget(), skill, true) && !actingPlayer.getAccessLevel().allowPeaceAttack())
 		{
 		{
 			// Send a System Message to the L2PcInstance
 			// Send a System Message to the L2PcInstance
@@ -854,7 +843,7 @@ public abstract class L2Summon extends L2Playable
 	@Override
 	@Override
 	public boolean isInCombat()
 	public boolean isInCombat()
 	{
 	{
-		return getOwner() != null ? getOwner().isInCombat() : false;
+		return (getOwner() != null) && getOwner().isInCombat();
 	}
 	}
 	
 	
 	@Override
 	@Override
@@ -870,7 +859,6 @@ public abstract class L2Summon extends L2Playable
 		{
 		{
 			mov.setInvisible(getOwner().getAppearance().getInvisible());
 			mov.setInvisible(getOwner().getAppearance().getInvisible());
 		}
 		}
-		
 		super.broadcastPacket(mov);
 		super.broadcastPacket(mov);
 	}
 	}
 	
 	
@@ -881,7 +869,6 @@ public abstract class L2Summon extends L2Playable
 		{
 		{
 			mov.setInvisible(getOwner().getAppearance().getInvisible());
 			mov.setInvisible(getOwner().getAppearance().getInvisible());
 		}
 		}
-		
 		super.broadcastPacket(mov, radiusInKnownlist);
 		super.broadcastPacket(mov, radiusInKnownlist);
 	}
 	}
 	
 	
@@ -908,14 +895,13 @@ public abstract class L2Summon extends L2Playable
 	
 	
 	public void broadcastNpcInfo(int val)
 	public void broadcastNpcInfo(int val)
 	{
 	{
-		Collection<L2PcInstance> plrs = getKnownList().getKnownPlayers().values();
-		for (L2PcInstance player : plrs)
+		for (L2PcInstance player : getKnownList().getKnownPlayers().values())
 		{
 		{
 			if ((player == null) || ((player == getOwner()) && !(this instanceof L2MerchantSummonInstance)))
 			if ((player == null) || ((player == getOwner()) && !(this instanceof L2MerchantSummonInstance)))
 			{
 			{
 				continue;
 				continue;
 			}
 			}
-			player.sendPacket(new AbstractNpcInfo.SummonInfo(this, player, val));
+			player.sendPacket(new SummonInfo(this, player, val));
 		}
 		}
 	}
 	}
 	
 	
@@ -951,12 +937,12 @@ public abstract class L2Summon extends L2Playable
 			updateEffectIcons(true);
 			updateEffectIcons(true);
 			if (isPet())
 			if (isPet())
 			{
 			{
-				activeChar.sendPacket(new PetItemList((L2PetInstance) this));
+				activeChar.sendPacket(new PetItemList(getInventory().getItems()));
 			}
 			}
 		}
 		}
 		else
 		else
 		{
 		{
-			activeChar.sendPacket(new AbstractNpcInfo.SummonInfo(this, activeChar, 0));
+			activeChar.sendPacket(new SummonInfo(this, activeChar, 0));
 		}
 		}
 	}
 	}
 	
 	
@@ -979,6 +965,146 @@ public abstract class L2Summon extends L2Playable
 		return getTemplate().isUndead();
 		return getTemplate().isUndead();
 	}
 	}
 	
 	
+	/**
+	 * Change the summon's state.
+	 */
+	public void switchMode()
+	{
+		// Do nothing.
+	}
+	
+	/**
+	 * Cancel the summon's action.
+	 */
+	public void cancelAction()
+	{
+		if (!isMovementDisabled())
+		{
+			getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE, null);
+		}
+	}
+	
+	/**
+	 * Performs an attack to the owner's target.
+	 */
+	public void doAttack()
+	{
+		if (getOwner() != null)
+		{
+			final L2Object target = getOwner().getTarget();
+			if (target != null)
+			{
+				setTarget(target);
+				getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
+			}
+		}
+	}
+	
+	/**
+	 * Verify if the summon can perform an attack.
+	 * @param ctrlPressed
+	 * @return
+	 */
+	public boolean canAttack(boolean ctrlPressed)
+	{
+		if (getOwner() == null)
+		{
+			return false;
+		}
+		
+		final L2Object target = getOwner().getTarget();
+		if ((target == null) || (this == target) || (getOwner() == target))
+		{
+			return false;
+		}
+		
+		// Sin eater, Big Boom, Wyvern can't attack with attack button.
+		final int npcId = getNpcId();
+		if (Util.contains(PASSIVE_SUMMONS, npcId))
+		{
+			getOwner().sendPacket(ActionFailed.STATIC_PACKET);
+			return false;
+		}
+		
+		if (!isBetrayed())
+		{
+			sendPacket(SystemMessageId.PET_REFUSING_ORDER);
+			sendPacket(ActionFailed.STATIC_PACKET);
+			return false;
+		}
+		
+		if (isAttackingDisabled())
+		{
+			if (getAttackEndTime() <= GameTimeController.getGameTicks())
+			{
+				return false;
+			}
+			getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
+		}
+		
+		if (isPet() && ((getLevel() - getOwner().getLevel()) > 20))
+		{
+			sendPacket(SystemMessageId.PET_TOO_HIGH_TO_CONTROL);
+			sendPacket(ActionFailed.STATIC_PACKET);
+			return false;
+		}
+		
+		if (getOwner().isInOlympiadMode() && !getOwner().isOlympiadStart())
+		{
+			// If owner is in Olympiad and the match isn't already start, send a Server->Client packet ActionFailed
+			getOwner().sendPacket(ActionFailed.STATIC_PACKET);
+			return false;
+		}
+		
+		if ((target.getActingPlayer() != null) && (getOwner().getSiegeState() > 0) && getOwner().isInsideZone(ZoneId.SIEGE) && (target.getActingPlayer().getSiegeSide() == getOwner().getSiegeSide()))
+		{
+			if (TerritoryWarManager.getInstance().isTWInProgress())
+			{
+				sendPacket(SystemMessageId.YOU_CANNOT_ATTACK_A_MEMBER_OF_THE_SAME_TERRITORY);
+			}
+			else
+			{
+				sendPacket(SystemMessageId.FORCED_ATTACK_IS_IMPOSSIBLE_AGAINST_SIEGE_SIDE_TEMPORARY_ALLIED_MEMBERS);
+			}
+			sendPacket(ActionFailed.STATIC_PACKET);
+			return false;
+		}
+		
+		if (!getOwner().getAccessLevel().allowPeaceAttack() && getOwner().isInsidePeaceZone(this, target))
+		{
+			sendPacket(SystemMessageId.TARGET_IN_PEACEZONE);
+			return false;
+		}
+		
+		if (isLockedTarget())
+		{
+			sendPacket(SystemMessageId.FAILED_CHANGE_TARGET);
+			return false;
+		}
+		
+		if (!target.isAutoAttackable(getOwner()) || !ctrlPressed)
+		{
+			setFollowStatus(false);
+			getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, target);
+			sendPacket(SystemMessageId.INCORRECT_TARGET);
+			return false;
+		}
+		
+		// TODO
+		// Siege golems AI doesn't support attacking other than doors at the moment.
+		if (!target.isDoor() && (npcId == L2SiegeSummonInstance.SWOOP_CANNON_ID))
+		{
+			return false;
+		}
+		
+		if (npcId == L2SiegeSummonInstance.SIEGE_GOLEM_ID)
+		{
+			return false;
+		}
+		
+		return false;
+	}
+	
 	@Override
 	@Override
 	public void sendPacket(L2GameServerPacket mov)
 	public void sendPacket(L2GameServerPacket mov)
 	{
 	{

+ 10 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2BabyPetInstance.java

@@ -35,16 +35,12 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.util.Rnd;
 import com.l2jserver.util.Rnd;
 
 
-/**
- * This class ...
- * @version $Revision: 1.15.2.10.2.16 $ $Date: 2005/04/06 16:13:40 $
- */
 public final class L2BabyPetInstance extends L2PetInstance
 public final class L2BabyPetInstance extends L2PetInstance
 {
 {
 	private static final int BUFF_CONTROL = 5771;
 	private static final int BUFF_CONTROL = 5771;
 	private static final int AWAKENING = 5753;
 	private static final int AWAKENING = 5753;
 	
 	
-	protected FastList<SkillHolder> _buffs = null;
+	protected List<SkillHolder> _buffs = null;
 	protected SkillHolder _majorHeal = null;
 	protected SkillHolder _majorHeal = null;
 	protected SkillHolder _minorHeal = null;
 	protected SkillHolder _minorHeal = null;
 	protected SkillHolder _recharge = null;
 	protected SkillHolder _recharge = null;
@@ -175,11 +171,20 @@ public final class L2BabyPetInstance extends L2PetInstance
 		}
 		}
 	}
 	}
 	
 	
+	@Override
 	public void switchMode()
 	public void switchMode()
 	{
 	{
 		_bufferMode = !_bufferMode;
 		_bufferMode = !_bufferMode;
 	}
 	}
 	
 	
+	/**
+	 * @return {@code true} if this baby pet is in support mode, {@code false} otherwise
+	 */
+	public boolean isInSupportMode()
+	{
+		return _bufferMode;
+	}
+	
 	private final void stopCastTask()
 	private final void stopCastTask()
 	{
 	{
 		if (_castTask != null)
 		if (_castTask != null)

+ 16 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CubicInstance.java

@@ -415,7 +415,7 @@ public final class L2CubicInstance
 				return;
 				return;
 			}
 			}
 			// test owners target if it is valid then use it
 			// test owners target if it is valid then use it
-			if ((ownerTarget instanceof L2Character) && (ownerTarget != _owner.getPet()) && (ownerTarget != _owner))
+			if ((ownerTarget instanceof L2Character) && (ownerTarget != _owner.getSummon()) && (ownerTarget != _owner))
 			{
 			{
 				// target mob which has aggro on you or your summon
 				// target mob which has aggro on you or your summon
 				if (ownerTarget instanceof L2Attackable)
 				if (ownerTarget instanceof L2Attackable)
@@ -425,9 +425,9 @@ public final class L2CubicInstance
 						_target = (L2Character) ownerTarget;
 						_target = (L2Character) ownerTarget;
 						return;
 						return;
 					}
 					}
-					if (_owner.getPet() != null)
+					if (_owner.hasSummon())
 					{
 					{
-						if ((((L2Attackable) ownerTarget).getAggroList().get(_owner.getPet()) != null) && !((L2Attackable) ownerTarget).isDead())
+						if ((((L2Attackable) ownerTarget).getAggroList().get(_owner.getSummon()) != null) && !((L2Attackable) ownerTarget).isDead())
 						{
 						{
 							_target = (L2Character) ownerTarget;
 							_target = (L2Character) ownerTarget;
 							return;
 							return;
@@ -533,9 +533,9 @@ public final class L2CubicInstance
 				}
 				}
 				if (!AttackStanceTaskManager.getInstance().hasAttackStanceTask(_owner))
 				if (!AttackStanceTaskManager.getInstance().hasAttackStanceTask(_owner))
 				{
 				{
-					if (_owner.getPet() != null)
+					if (_owner.hasSummon())
 					{
 					{
-						if (!AttackStanceTaskManager.getInstance().hasAttackStanceTask(_owner.getPet()))
+						if (!AttackStanceTaskManager.getInstance().hasAttackStanceTask(_owner.getSummon()))
 						{
 						{
 							stopAction();
 							stopAction();
 							return;
 							return;
@@ -959,27 +959,27 @@ public final class L2CubicInstance
 						}
 						}
 					}
 					}
 				}
 				}
-				if (partyMember.getPet() != null)
+				if (partyMember.getSummon() != null)
 				{
 				{
-					if (partyMember.getPet().isDead())
+					if (partyMember.getSummon().isDead())
 					{
 					{
 						continue;
 						continue;
 					}
 					}
 					
 					
-					// if party member's pet not dead, check if it is in castrange of heal cubic
-					if (!isInCubicRange(_owner, partyMember.getPet()))
+					// If party member's pet not dead, check if it is in cast range of heal cubic.
+					if (!isInCubicRange(_owner, partyMember.getSummon()))
 					{
 					{
 						continue;
 						continue;
 					}
 					}
 					
 					
 					// member's pet is in cubic casting range, check if he need heal and if he have
 					// member's pet is in cubic casting range, check if he need heal and if he have
 					// the lowest HP
 					// the lowest HP
-					if (partyMember.getPet().getCurrentHp() < partyMember.getPet().getMaxHp())
+					if (partyMember.getSummon().getCurrentHp() < partyMember.getSummon().getMaxHp())
 					{
 					{
-						if (percentleft > (partyMember.getPet().getCurrentHp() / partyMember.getPet().getMaxHp()))
+						if (percentleft > (partyMember.getSummon().getCurrentHp() / partyMember.getSummon().getMaxHp()))
 						{
 						{
-							percentleft = (partyMember.getPet().getCurrentHp() / partyMember.getPet().getMaxHp());
-							target = partyMember.getPet();
+							percentleft = (partyMember.getSummon().getCurrentHp() / partyMember.getSummon().getMaxHp());
+							target = partyMember.getSummon();
 						}
 						}
 					}
 					}
 				}
 				}
@@ -992,11 +992,11 @@ public final class L2CubicInstance
 				percentleft = (_owner.getCurrentHp() / _owner.getMaxHp());
 				percentleft = (_owner.getCurrentHp() / _owner.getMaxHp());
 				target = _owner;
 				target = _owner;
 			}
 			}
-			if (_owner.getPet() != null)
+			if (_owner.hasSummon())
 			{
 			{
-				if (!_owner.getPet().isDead() && (_owner.getPet().getCurrentHp() < _owner.getPet().getMaxHp()) && (percentleft > (_owner.getPet().getCurrentHp() / _owner.getPet().getMaxHp())) && isInCubicRange(_owner, _owner.getPet()))
+				if (!_owner.getSummon().isDead() && (_owner.getSummon().getCurrentHp() < _owner.getSummon().getMaxHp()) && (percentleft > (_owner.getSummon().getCurrentHp() / _owner.getSummon().getMaxHp())) && isInCubicRange(_owner, _owner.getSummon()))
 				{
 				{
-					target = _owner.getPet();
+					target = _owner.getSummon();
 				}
 				}
 			}
 			}
 		}
 		}

+ 0 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DoorInstance.java

@@ -450,11 +450,6 @@ public class L2DoorInstance extends L2Character
 		return (isCastle || isFort);
 		return (isCastle || isFort);
 	}
 	}
 	
 	
-	public boolean isAttackable(L2Character attacker)
-	{
-		return isAutoAttackable(attacker);
-	}
-	
 	@Override
 	@Override
 	public void updateAbnormalEffect()
 	public void updateAbnormalEffect()
 	{
 	{

+ 2 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java

@@ -21,7 +21,6 @@ import com.l2jserver.gameserver.datatables.NpcBufferTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -90,17 +89,15 @@ public class L2NpcBufferInstance extends L2Npc
 		}
 		}
 		
 		
 		L2Character target = player;
 		L2Character target = player;
-		
 		if (command.startsWith("Pet"))
 		if (command.startsWith("Pet"))
 		{
 		{
-			L2Summon pet = player.getPet();
-			if (pet == null)
+			if (player.hasSummon())
 			{
 			{
 				player.sendMessage("You do not have your pet summoned.");
 				player.sendMessage("You do not have your pet summoned.");
 				showChatWindow(player, 0); // 0 = main window
 				showChatWindow(player, 0); // 0 = main window
 				return;
 				return;
 			}
 			}
-			target = pet;
+			target = player.getSummon();
 		}
 		}
 		
 		
 		int npcId = getNpcId();
 		int npcId = getNpcId();

+ 65 - 69
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -2115,9 +2115,9 @@ public final class L2PcInstance extends L2Playable
 		sendPacket(new ExBrExtraUserInfo(this));
 		sendPacket(new ExBrExtraUserInfo(this));
 		
 		
 		// If this player has a pet update the pets pvp flag as well
 		// If this player has a pet update the pets pvp flag as well
-		if (getPet() != null)
+		if (hasSummon())
 		{
 		{
-			sendPacket(new RelationChanged(getPet(), getRelation(this), false));
+			sendPacket(new RelationChanged(getSummon(), getRelation(this), false));
 		}
 		}
 		
 		
 		Collection<L2PcInstance> plrs = getKnownList().getKnownPlayers().values();
 		Collection<L2PcInstance> plrs = getKnownList().getKnownPlayers().values();
@@ -2125,9 +2125,9 @@ public final class L2PcInstance extends L2Playable
 		for (L2PcInstance target : plrs)
 		for (L2PcInstance target : plrs)
 		{
 		{
 			target.sendPacket(new RelationChanged(this, getRelation(target), isAutoAttackable(target)));
 			target.sendPacket(new RelationChanged(this, getRelation(target), isAutoAttackable(target)));
-			if (getPet() != null)
+			if (hasSummon())
 			{
 			{
-				target.sendPacket(new RelationChanged(getPet(), getRelation(target), isAutoAttackable(target)));
+				target.sendPacket(new RelationChanged(getSummon(), getRelation(target), isAutoAttackable(target)));
 			}
 			}
 		}
 		}
 	}
 	}
@@ -4517,7 +4517,7 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		
 		
 		// Pet is summoned and not the item that summoned the pet AND not the buggle from strider you're mounting
 		// Pet is summoned and not the item that summoned the pet AND not the buggle from strider you're mounting
-		if (((getPet() != null) && (getPet().getControlObjectId() == objectId)) || (getMountObjectID() == objectId))
+		if ((hasSummon() && (getSummon().getControlObjectId() == objectId)) || (getMountObjectID() == objectId))
 		{
 		{
 			if (Config.DEBUG)
 			if (Config.DEBUG)
 			{
 			{
@@ -4693,7 +4693,7 @@ public final class L2PcInstance extends L2Playable
 			}
 			}
 			case SUMMON:
 			case SUMMON:
 			{
 			{
-				if (!((L2SkillSummon) skill).isCubic() && ((getPet() != null) || isMounted() || CharSummonTable.getInstance().getPets().contains(getObjectId()) || CharSummonTable.getInstance().getPets().contains(getObjectId())))
+				if (!((L2SkillSummon) skill).isCubic() && (hasSummon() || isMounted() || CharSummonTable.getInstance().getPets().contains(getObjectId()) || CharSummonTable.getInstance().getPets().contains(getObjectId())))
 				{
 				{
 					if (Config.DEBUG)
 					if (Config.DEBUG)
 					{
 					{
@@ -4901,9 +4901,9 @@ public final class L2PcInstance extends L2Playable
 				if ((oldrelation != null) && (oldrelation != relation))
 				if ((oldrelation != null) && (oldrelation != relation))
 				{
 				{
 					player.sendPacket(new RelationChanged(this, relation, isAutoAttackable(player)));
 					player.sendPacket(new RelationChanged(this, relation, isAutoAttackable(player)));
-					if (getPet() != null)
+					if (hasSummon())
 					{
 					{
-						player.sendPacket(new RelationChanged(getPet(), relation, isAutoAttackable(player)));
+						player.sendPacket(new RelationChanged(getSummon(), relation, isAutoAttackable(player)));
 					}
 					}
 				}
 				}
 			}
 			}
@@ -4937,9 +4937,9 @@ public final class L2PcInstance extends L2Playable
 					if ((oldrelation != null) && (oldrelation != relation))
 					if ((oldrelation != null) && (oldrelation != relation))
 					{
 					{
 						player.sendPacket(new RelationChanged(this, relation, isAutoAttackable(player)));
 						player.sendPacket(new RelationChanged(this, relation, isAutoAttackable(player)));
-						if (getPet() != null)
+						if (hasSummon())
 						{
 						{
-							player.sendPacket(new RelationChanged(getPet(), relation, isAutoAttackable(player)));
+							player.sendPacket(new RelationChanged(getSummon(), relation, isAutoAttackable(player)));
 						}
 						}
 					}
 					}
 				}
 				}
@@ -6067,7 +6067,7 @@ public final class L2PcInstance extends L2Playable
 					itemDrop.isTimeLimitedItem() || // Dont drop Time Limited Items
 					itemDrop.isTimeLimitedItem() || // Dont drop Time Limited Items
 					!itemDrop.isDropable() || (itemDrop.getItemId() == PcInventory.ADENA_ID) || // Adena
 					!itemDrop.isDropable() || (itemDrop.getItemId() == PcInventory.ADENA_ID) || // Adena
 					(itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST) || // Quest Items
 					(itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST) || // Quest Items
-					((getPet() != null) && (getPet().getControlObjectId() == itemDrop.getItemId())) || // Control Item of active pet
+					(hasSummon() && (getSummon().getControlObjectId() == itemDrop.getItemId())) || // Control Item of active pet
 					(Arrays.binarySearch(Config.KARMA_LIST_NONDROPPABLE_ITEMS, itemDrop.getItemId()) >= 0) || // Item listed in the non droppable item list
 					(Arrays.binarySearch(Config.KARMA_LIST_NONDROPPABLE_ITEMS, itemDrop.getItemId()) >= 0) || // Item listed in the non droppable item list
 					(Arrays.binarySearch(Config.KARMA_LIST_NONDROPPABLE_PET_ITEMS, itemDrop.getItemId()) >= 0 // Item listed in the non droppable pet item list
 					(Arrays.binarySearch(Config.KARMA_LIST_NONDROPPABLE_PET_ITEMS, itemDrop.getItemId()) >= 0 // Item listed in the non droppable pet item list
 					))
 					))
@@ -6564,11 +6564,8 @@ public final class L2PcInstance extends L2Playable
 		stopRecoGiveTask();
 		stopRecoGiveTask();
 	}
 	}
 	
 	
-	/**
-	 * Return the L2Summon of the L2PcInstance or null.
-	 */
 	@Override
 	@Override
-	public L2Summon getPet()
+	public L2Summon getSummon()
 	{
 	{
 		return _summon;
 		return _summon;
 	}
 	}
@@ -6576,7 +6573,7 @@ public final class L2PcInstance extends L2Playable
 	/**
 	/**
 	 * @return {@code true} if the player has a pet, {@code false} otherwise
 	 * @return {@code true} if the player has a pet, {@code false} otherwise
 	 */
 	 */
-	public boolean hasPet()
+	public boolean hasSummon()
 	{
 	{
 		return _summon != null;
 		return _summon != null;
 	}
 	}
@@ -7566,9 +7563,9 @@ public final class L2PcInstance extends L2Playable
 		for (L2PcInstance player : plrs)
 		for (L2PcInstance player : plrs)
 		{
 		{
 			player.sendPacket(new RelationChanged(this, getRelation(player), isAutoAttackable(player)));
 			player.sendPacket(new RelationChanged(this, getRelation(player), isAutoAttackable(player)));
-			if (getPet() != null)
+			if (hasSummon())
 			{
 			{
-				player.sendPacket(new RelationChanged(getPet(), getRelation(player), isAutoAttackable(player)));
+				player.sendPacket(new RelationChanged(getSummon(), getRelation(player), isAutoAttackable(player)));
 			}
 			}
 		}
 		}
 	}
 	}
@@ -7586,9 +7583,9 @@ public final class L2PcInstance extends L2Playable
 		for (L2PcInstance player : plrs)
 		for (L2PcInstance player : plrs)
 		{
 		{
 			player.sendPacket(new RelationChanged(this, getRelation(player), isAutoAttackable(player)));
 			player.sendPacket(new RelationChanged(this, getRelation(player), isAutoAttackable(player)));
-			if (getPet() != null)
+			if (hasSummon())
 			{
 			{
-				player.sendPacket(new RelationChanged(getPet(), getRelation(player), isAutoAttackable(player)));
+				player.sendPacket(new RelationChanged(getSummon(), getRelation(player), isAutoAttackable(player)));
 			}
 			}
 		}
 		}
 	}
 	}
@@ -7945,9 +7942,9 @@ public final class L2PcInstance extends L2Playable
 			
 			
 			// Restore pet if exists in the world
 			// Restore pet if exists in the world
 			player.setPet(L2World.getInstance().getPet(player.getObjectId()));
 			player.setPet(L2World.getInstance().getPet(player.getObjectId()));
-			if (player.getPet() != null)
+			if (player.hasSummon())
 			{
 			{
-				player.getPet().setOwner(player);
+				player.getSummon().setOwner(player);
 			}
 			}
 			
 			
 			// Update the overloaded status of the L2PcInstance
 			// Update the overloaded status of the L2PcInstance
@@ -9171,7 +9168,7 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		
 		
 		// Check if the attacker isn't the L2PcInstance Pet
 		// Check if the attacker isn't the L2PcInstance Pet
-		if ((attacker == this) || (attacker == getPet()))
+		if ((attacker == this) || (attacker == getSummon()))
 		{
 		{
 			return false;
 			return false;
 		}
 		}
@@ -9488,7 +9485,7 @@ public final class L2PcInstance extends L2Playable
 				break;
 				break;
 			case TARGET_PET:
 			case TARGET_PET:
 			case TARGET_SUMMON:
 			case TARGET_SUMMON:
-				target = getPet();
+				target = getSummon();
 				break;
 				break;
 			default:
 			default:
 				target = getTarget();
 				target = getTarget();
@@ -10671,9 +10668,9 @@ public final class L2PcInstance extends L2Playable
 	
 	
 	public void enterOlympiadObserverMode(Location loc, int id)
 	public void enterOlympiadObserverMode(Location loc, int id)
 	{
 	{
-		if (getPet() != null)
+		if (hasSummon())
 		{
 		{
-			getPet().unSummon(this);
+			getSummon().unSummon(this);
 		}
 		}
 		
 		
 		stopEffects(L2EffectType.HIDE);
 		stopEffects(L2EffectType.HIDE);
@@ -11086,9 +11083,9 @@ public final class L2PcInstance extends L2Playable
 	{
 	{
 		super.setTeam(team);
 		super.setTeam(team);
 		broadcastUserInfo();
 		broadcastUserInfo();
-		if (getPet() != null)
+		if (hasSummon())
 		{
 		{
-			getPet().broadcastStatusUpdate();
+			getSummon().broadcastStatusUpdate();
 		}
 		}
 	}
 	}
 	
 	
@@ -11439,9 +11436,9 @@ public final class L2PcInstance extends L2Playable
 			_charges.set(0);
 			_charges.set(0);
 			stopChargeTask();
 			stopChargeTask();
 			
 			
-			if (getPet() instanceof L2ServitorInstance)
+			if (hasSummon() && getSummon().isServitor())
 			{
 			{
-				getPet().unSummon(this);
+				getSummon().unSummon(this);
 			}
 			}
 			
 			
 			if (classIndex == 0)
 			if (classIndex == 0)
@@ -11800,7 +11797,7 @@ public final class L2PcInstance extends L2Playable
 			}
 			}
 			return;
 			return;
 		}
 		}
-		if ((Pet && (getPet() != null) && getPet().isDead()) || (!Pet && isDead()))
+		if ((Pet && hasSummon() && getSummon().isDead()) || (!Pet && isDead()))
 		{
 		{
 			_reviveRequested = 1;
 			_reviveRequested = 1;
 			int restoreExp = 0;
 			int restoreExp = 0;
@@ -11837,7 +11834,7 @@ public final class L2PcInstance extends L2Playable
 	
 	
 	public void reviveAnswer(int answer)
 	public void reviveAnswer(int answer)
 	{
 	{
-		if ((_reviveRequested != 1) || (!isDead() && !_revivePet) || (_revivePet && (getPet() != null) && !getPet().isDead()))
+		if ((_reviveRequested != 1) || (!isDead() && !_revivePet) || (_revivePet && hasSummon() && !getSummon().isDead()))
 		{
 		{
 			return;
 			return;
 		}
 		}
@@ -11860,15 +11857,15 @@ public final class L2PcInstance extends L2Playable
 					doRevive();
 					doRevive();
 				}
 				}
 			}
 			}
-			else if (getPet() != null)
+			else if (hasSummon())
 			{
 			{
 				if (_revivePower != 0)
 				if (_revivePower != 0)
 				{
 				{
-					getPet().doRevive(_revivePower);
+					getSummon().doRevive(_revivePower);
 				}
 				}
 				else
 				else
 				{
 				{
-					getPet().doRevive();
+					getSummon().doRevive();
 				}
 				}
 			}
 			}
 		}
 		}
@@ -11898,11 +11895,11 @@ public final class L2PcInstance extends L2Playable
 		{
 		{
 			sendPacket(SystemMessageId.YOU_ARE_NO_LONGER_PROTECTED_FROM_AGGRESSIVE_MONSTERS);
 			sendPacket(SystemMessageId.YOU_ARE_NO_LONGER_PROTECTED_FROM_AGGRESSIVE_MONSTERS);
 			
 			
-			if (Config.RESTORE_SERVITOR_ON_RECONNECT && (getPet() == null) && CharSummonTable.getInstance().getServitors().containsKey(getObjectId()))
+			if (Config.RESTORE_SERVITOR_ON_RECONNECT && !hasSummon() && CharSummonTable.getInstance().getServitors().containsKey(getObjectId()))
 			{
 			{
 				CharSummonTable.getInstance().restoreServitor(this);
 				CharSummonTable.getInstance().restoreServitor(this);
 			}
 			}
-			if (Config.RESTORE_PET_ON_RECONNECT && (getPet() == null) && CharSummonTable.getInstance().getPets().containsKey(getObjectId()))
+			if (Config.RESTORE_PET_ON_RECONNECT && !hasSummon() && CharSummonTable.getInstance().getPets().containsKey(getObjectId()))
 			{
 			{
 				CharSummonTable.getInstance().restorePet(this);
 				CharSummonTable.getInstance().restorePet(this);
 			}
 			}
@@ -11976,14 +11973,13 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		
 		
 		// Modify the position of the pet if necessary
 		// Modify the position of the pet if necessary
-		L2Summon pet = getPet();
-		if (pet != null)
+		if (hasSummon())
 		{
 		{
-			pet.setFollowStatus(false);
-			pet.teleToLocation(getPosition().getX(), getPosition().getY(), getPosition().getZ(), false);
-			((L2SummonAI) pet.getAI()).setStartFollowController(true);
-			pet.setFollowStatus(true);
-			pet.updateAndBroadcastStatus(0);
+			getSummon().setFollowStatus(false);
+			getSummon().teleToLocation(getPosition().getX(), getPosition().getY(), getPosition().getZ(), false);
+			((L2SummonAI) getSummon().getAI()).setStartFollowController(true);
+			getSummon().setFollowStatus(true);
+			getSummon().updateAndBroadcastStatus(0);
 		}
 		}
 		
 		
 		TvTEvent.onTeleported(this);
 		TvTEvent.onTeleported(this);
@@ -12242,7 +12238,7 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		
 		
 		// Pet is summoned and not the item that summoned the pet AND not the buggle from strider you're mounting
 		// Pet is summoned and not the item that summoned the pet AND not the buggle from strider you're mounting
-		if (((getPet() != null) && (getPet().getControlObjectId() == objectId)) || (getMountObjectID() == objectId))
+		if ((hasSummon() && (getSummon().getControlObjectId() == objectId)) || (getMountObjectID() == objectId))
 		{
 		{
 			if (Config.DEBUG)
 			if (Config.DEBUG)
 			{
 			{
@@ -12609,17 +12605,17 @@ public final class L2PcInstance extends L2Playable
 		}
 		}
 		
 		
 		// If the L2PcInstance has Pet, unsummon it
 		// If the L2PcInstance has Pet, unsummon it
-		if (getPet() != null)
+		if (hasSummon())
 		{
 		{
 			try
 			try
 			{
 			{
-				getPet().setRestoreSummon(true);
+				getSummon().setRestoreSummon(true);
 				
 				
-				getPet().unSummon(this);
-				// dead pet wasnt unsummoned, broadcast npcinfo changes (pet will be without owner name - means owner offline)
-				if (getPet() != null)
+				getSummon().unSummon(this);
+				// Dead pet wasn't unsummoned, broadcast npcinfo changes (pet will be without owner name - means owner offline)
+				if (hasSummon())
 				{
 				{
-					getPet().broadcastNpcInfo(0);
+					getSummon().broadcastNpcInfo(0);
 				}
 				}
 			}
 			}
 			catch (Exception e)
 			catch (Exception e)
@@ -12701,10 +12697,10 @@ public final class L2PcInstance extends L2Playable
 						final int x = loc.getX() + Rnd.get(-30, 30);
 						final int x = loc.getX() + Rnd.get(-30, 30);
 						final int y = loc.getY() + Rnd.get(-30, 30);
 						final int y = loc.getY() + Rnd.get(-30, 30);
 						setXYZInvisible(x, y, loc.getZ());
 						setXYZInvisible(x, y, loc.getZ());
-						if (getPet() != null) // dead pet
+						if (hasSummon()) // dead pet
 						{
 						{
-							getPet().teleToLocation(loc, true);
-							getPet().setInstanceId(0);
+							getSummon().teleToLocation(loc, true);
+							getSummon().setInstanceId(0);
 						}
 						}
 					}
 					}
 				}
 				}
@@ -14638,10 +14634,10 @@ public final class L2PcInstance extends L2Playable
 		{
 		{
 			return;
 			return;
 		}
 		}
-		if (getPet() != null)
+		if (hasSummon())
 		{
 		{
-			setCurrentFeed(((L2PetInstance) getPet()).getCurrentFed());
-			_controlItemId = getPet().getControlObjectId();
+			setCurrentFeed(((L2PetInstance) getSummon()).getCurrentFed());
+			_controlItemId = getSummon().getControlObjectId();
 			sendPacket(new SetupGauge(3, (getCurrentFeed() * 10000) / getFeedConsume(), (getMaxFeed() * 10000) / getFeedConsume()));
 			sendPacket(new SetupGauge(3, (getCurrentFeed() * 10000) / getFeedConsume(), (getMaxFeed() * 10000) / getFeedConsume()));
 			if (!isDead())
 			if (!isDead())
 			{
 			{
@@ -15235,18 +15231,18 @@ public final class L2PcInstance extends L2Playable
 			if ((oldrelation != null) && (oldrelation != relation1))
 			if ((oldrelation != null) && (oldrelation != relation1))
 			{
 			{
 				activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
 				activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
-				if (getPet() != null)
+				if (hasSummon())
 				{
 				{
-					activeChar.sendPacket(new RelationChanged(getPet(), relation1, isAutoAttackable(activeChar)));
+					activeChar.sendPacket(new RelationChanged(getSummon(), relation1, isAutoAttackable(activeChar)));
 				}
 				}
 			}
 			}
 			oldrelation = activeChar.getKnownList().getKnownRelations().get(getObjectId());
 			oldrelation = activeChar.getKnownList().getKnownRelations().get(getObjectId());
 			if ((oldrelation != null) && (oldrelation != relation2))
 			if ((oldrelation != null) && (oldrelation != relation2))
 			{
 			{
 				sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
 				sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
-				if (activeChar.getPet() != null)
+				if (activeChar.hasSummon())
 				{
 				{
-					sendPacket(new RelationChanged(activeChar.getPet(), relation2, activeChar.isAutoAttackable(this)));
+					sendPacket(new RelationChanged(activeChar.getSummon(), relation2, activeChar.isAutoAttackable(this)));
 				}
 				}
 			}
 			}
 			activeChar.sendPacket(new GetOnVehicle(getObjectId(), getBoat().getObjectId(), getInVehiclePosition()));
 			activeChar.sendPacket(new GetOnVehicle(getObjectId(), getBoat().getObjectId(), getInVehiclePosition()));
@@ -15263,18 +15259,18 @@ public final class L2PcInstance extends L2Playable
 			if ((oldrelation != null) && (oldrelation != relation1))
 			if ((oldrelation != null) && (oldrelation != relation1))
 			{
 			{
 				activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
 				activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
-				if (getPet() != null)
+				if (hasSummon())
 				{
 				{
-					activeChar.sendPacket(new RelationChanged(getPet(), relation1, isAutoAttackable(activeChar)));
+					activeChar.sendPacket(new RelationChanged(getSummon(), relation1, isAutoAttackable(activeChar)));
 				}
 				}
 			}
 			}
 			oldrelation = activeChar.getKnownList().getKnownRelations().get(getObjectId());
 			oldrelation = activeChar.getKnownList().getKnownRelations().get(getObjectId());
 			if ((oldrelation != null) && (oldrelation != relation2))
 			if ((oldrelation != null) && (oldrelation != relation2))
 			{
 			{
 				sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
 				sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
-				if (activeChar.getPet() != null)
+				if (activeChar.hasSummon())
 				{
 				{
-					sendPacket(new RelationChanged(activeChar.getPet(), relation2, activeChar.isAutoAttackable(this)));
+					sendPacket(new RelationChanged(activeChar.getSummon(), relation2, activeChar.isAutoAttackable(this)));
 				}
 				}
 			}
 			}
 			activeChar.sendPacket(new ExGetOnAirShip(this, getAirShip()));
 			activeChar.sendPacket(new ExGetOnAirShip(this, getAirShip()));
@@ -15289,18 +15285,18 @@ public final class L2PcInstance extends L2Playable
 			if ((oldrelation != null) && (oldrelation != relation1))
 			if ((oldrelation != null) && (oldrelation != relation1))
 			{
 			{
 				activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
 				activeChar.sendPacket(new RelationChanged(this, relation1, isAutoAttackable(activeChar)));
-				if (getPet() != null)
+				if (hasSummon())
 				{
 				{
-					activeChar.sendPacket(new RelationChanged(getPet(), relation1, isAutoAttackable(activeChar)));
+					activeChar.sendPacket(new RelationChanged(getSummon(), relation1, isAutoAttackable(activeChar)));
 				}
 				}
 			}
 			}
 			oldrelation = activeChar.getKnownList().getKnownRelations().get(getObjectId());
 			oldrelation = activeChar.getKnownList().getKnownRelations().get(getObjectId());
 			if ((oldrelation != null) && (oldrelation != relation2))
 			if ((oldrelation != null) && (oldrelation != relation2))
 			{
 			{
 				sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
 				sendPacket(new RelationChanged(activeChar, relation2, activeChar.isAutoAttackable(this)));
-				if (activeChar.getPet() != null)
+				if (activeChar.hasSummon())
 				{
 				{
-					sendPacket(new RelationChanged(activeChar.getPet(), relation2, activeChar.isAutoAttackable(this)));
+					sendPacket(new RelationChanged(activeChar.getSummon(), relation2, activeChar.isAutoAttackable(this)));
 				}
 				}
 			}
 			}
 		}
 		}

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java

@@ -138,7 +138,7 @@ public class L2PetInstance extends L2Summon
 		{
 		{
 			try
 			try
 			{
 			{
-				if ((getOwner() == null) || (getOwner().getPet() == null) || (getOwner().getPet().getObjectId() != getObjectId()))
+				if ((getOwner() == null) || !getOwner().hasSummon() || (getOwner().getSummon().getObjectId() != getObjectId()))
 				{
 				{
 					stopFeed();
 					stopFeed();
 					return;
 					return;
@@ -659,8 +659,7 @@ public class L2PetInstance extends L2Summon
 			}
 			}
 			getInventory().addItem("Pickup", target, getOwner(), this);
 			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);
+			sendPacket(new PetItemList(getInventory().getItems()));
 		}
 		}
 		
 		
 		getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
 		getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
@@ -1206,7 +1205,7 @@ public class L2PetInstance extends L2Summon
 		// stop feeding task if its active
 		// stop feeding task if its active
 		
 		
 		stopFeed();
 		stopFeed();
-		if (!isDead() && (getOwner().getPet() == this))
+		if (!isDead() && (getOwner().getSummon() == this))
 		{
 		{
 			_feedTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new FeedTask(), 10000, 10000);
 			_feedTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new FeedTask(), 10000, 10000);
 		}
 		}

+ 1 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PetManagerInstance.java

@@ -15,15 +15,10 @@
 package com.l2jserver.gameserver.model.actor.instance;
 package com.l2jserver.gameserver.model.actor.instance;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
-import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.util.Evolve;
 import com.l2jserver.gameserver.util.Evolve;
 
 
-/**
- * This class ...
- * @version $Revision$ $Date$
- */
 public class L2PetManagerInstance extends L2MerchantInstance
 public class L2PetManagerInstance extends L2MerchantInstance
 {
 {
 	public L2PetManagerInstance(int objectID, L2NpcTemplate template)
 	public L2PetManagerInstance(int objectID, L2NpcTemplate template)
@@ -53,9 +48,7 @@ public class L2PetManagerInstance extends L2MerchantInstance
 	public void showChatWindow(L2PcInstance player)
 	public void showChatWindow(L2PcInstance player)
 	{
 	{
 		String filename = "data/html/petmanager/" + getNpcId() + ".htm";
 		String filename = "data/html/petmanager/" + getNpcId() + ".htm";
-		
-		L2Summon summon = player.getPet();
-		if ((getNpcId() == 36478) && (summon != null))
+		if ((getNpcId() == 36478) && player.hasSummon())
 		{
 		{
 			filename = "data/html/petmanager/restore-unsummonpet.htm";
 			filename = "data/html/petmanager/restore-unsummonpet.htm";
 		}
 		}

+ 0 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SiegeSummonInstance.java

@@ -16,7 +16,6 @@ package com.l2jserver.gameserver.model.actor.instance;
 
 
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.zone.ZoneId;
 
 
 public class L2SiegeSummonInstance extends L2ServitorInstance
 public class L2SiegeSummonInstance extends L2ServitorInstance
 {
 {
@@ -29,15 +28,4 @@ public class L2SiegeSummonInstance extends L2ServitorInstance
 		super(objectId, template, owner, skill);
 		super(objectId, template, owner, skill);
 		setInstanceType(InstanceType.L2SiegeSummonInstance);
 		setInstanceType(InstanceType.L2SiegeSummonInstance);
 	}
 	}
-	
-	@Override
-	public void onSpawn()
-	{
-		super.onSpawn();
-		if (!getOwner().isGM() && !isInsideZone(ZoneId.SIEGE))
-		{
-			unSummon(getOwner());
-			getOwner().sendMessage("Summon was unsummoned because it exited siege zone");
-		}
-	}
 }
 }

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

@@ -234,7 +234,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 				return;
 				return;
 			}
 			}
 			// Subclasses may not be changed while a summon is active.
 			// Subclasses may not be changed while a summon is active.
-			if (player.getPet() != null)
+			if (player.hasSummon())
 			{
 			{
 				html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_NoSummon.htm");
 				html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_NoSummon.htm");
 				player.sendPacket(html);
 				player.sendPacket(html);

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

@@ -148,9 +148,9 @@ public class PcStat extends PlayableStat
 		float ratioTakenByPlayer = 0;
 		float ratioTakenByPlayer = 0;
 		
 		
 		// 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 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))
+		if (activeChar.hasSummon() && activeChar.getSummon().isPet() && Util.checkIfInShortRadius(Config.ALT_PARTY_RANGE, activeChar, activeChar.getSummon(), false))
 		{
 		{
-			L2PetInstance pet = (L2PetInstance) activeChar.getPet();
+			L2PetInstance pet = (L2PetInstance) activeChar.getSummon();
 			ratioTakenByPlayer = pet.getPetLevelData().getOwnerExpTaken() / 100f;
 			ratioTakenByPlayer = pet.getPetLevelData().getOwnerExpTaken() / 100f;
 			
 			
 			// only give exp/sp to the pet by taking from the owner if the pet has a non-zero, positive ratio
 			// only give exp/sp to the pet by taking from the owner if the pet has a non-zero, positive ratio

+ 5 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/PcStatus.java

@@ -21,7 +21,6 @@ import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance;
 import com.l2jserver.gameserver.model.actor.stat.PcStat;
 import com.l2jserver.gameserver.model.actor.stat.PcStat;
 import com.l2jserver.gameserver.model.entity.Duel;
 import com.l2jserver.gameserver.model.entity.Duel;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.QuestState;
@@ -144,8 +143,8 @@ public class PcStatus extends PlayableStatus
 			}
 			}
 			
 			
 			// Check and calculate transfered damage
 			// Check and calculate transfered damage
-			final L2Summon summon = getActiveChar().getPet();
-			if ((summon != null) && (summon instanceof L2ServitorInstance) && Util.checkIfInRange(1000, getActiveChar(), summon, true))
+			final L2Summon summon = getActiveChar().getSummon();
+			if (getActiveChar().hasSummon() && summon.isServitor() && Util.checkIfInRange(1000, getActiveChar(), summon, true))
 			{
 			{
 				tDmg = ((int) value * (int) getActiveChar().getStat().calcStat(Stats.TRANSFER_DAMAGE_PERCENT, 0, null, null)) / 100;
 				tDmg = ((int) value * (int) getActiveChar().getStat().calcStat(Stats.TRANSFER_DAMAGE_PERCENT, 0, null, null)) / 100;
 				
 				
@@ -245,7 +244,7 @@ public class PcStatus extends PlayableStatus
 				if (tDmg > 0)
 				if (tDmg > 0)
 				{
 				{
 					smsg = SystemMessage.getSystemMessage(SystemMessageId.C1_RECEIVED_DAMAGE_OF_S3_FROM_C2);
 					smsg = SystemMessage.getSystemMessage(SystemMessageId.C1_RECEIVED_DAMAGE_OF_S3_FROM_C2);
-					smsg.addString(getActiveChar().getPet().getName());
+					smsg.addString(getActiveChar().getSummon().getName());
 					smsg.addCharName(attacker);
 					smsg.addCharName(attacker);
 					smsg.addNumber(tDmg);
 					smsg.addNumber(tDmg);
 					getActiveChar().sendPacket(smsg);
 					getActiveChar().sendPacket(smsg);
@@ -297,9 +296,9 @@ public class PcStatus extends PlayableStatus
 				stopHpMpRegeneration();
 				stopHpMpRegeneration();
 				getActiveChar().setIsDead(true);
 				getActiveChar().setIsDead(true);
 				getActiveChar().setIsPendingRevive(true);
 				getActiveChar().setIsPendingRevive(true);
-				if (getActiveChar().getPet() != null)
+				if (getActiveChar().hasSummon())
 				{
 				{
-					getActiveChar().getPet().getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null);
+					getActiveChar().getSummon().getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null);
 				}
 				}
 				return;
 				return;
 			}
 			}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerHasPet.java

@@ -46,7 +46,7 @@ public class ConditionPlayerHasPet extends Condition
 	@Override
 	@Override
 	public boolean testImpl(Env env)
 	public boolean testImpl(Env env)
 	{
 	{
-		if ((env.getPlayer() == null) || (!(env.getPlayer().getPet() instanceof L2PetInstance)))
+		if ((env.getPlayer() == null) || (!(env.getPlayer().getSummon() instanceof L2PetInstance)))
 		{
 		{
 			return false;
 			return false;
 		}
 		}
@@ -56,7 +56,7 @@ public class ConditionPlayerHasPet extends Condition
 			return true;
 			return true;
 		}
 		}
 		
 		
-		final L2ItemInstance controlItem = ((L2PetInstance) env.getPlayer().getPet()).getControlItem();
-		return controlItem == null ? false : _controlItemIds.contains(controlItem.getItemId());
+		final L2ItemInstance controlItem = ((L2PetInstance) env.getPlayer().getSummon()).getControlItem();
+		return (controlItem != null) && _controlItemIds.contains(controlItem.getItemId());
 	}
 	}
 }
 }

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerServitorNpcId.java

@@ -44,10 +44,10 @@ public class ConditionPlayerServitorNpcId extends Condition
 	@Override
 	@Override
 	public boolean testImpl(Env env)
 	public boolean testImpl(Env env)
 	{
 	{
-		if ((env.getPlayer() == null) || (env.getCharacter().getPet() == null))
+		if ((env.getPlayer() == null) || env.getPlayer().hasSummon())
 		{
 		{
 			return false;
 			return false;
 		}
 		}
-		return (_npcIds == null) || _npcIds.contains(env.getPlayer().getPet().getNpcId());
+		return (_npcIds == null) || _npcIds.contains(env.getPlayer().getSummon().getNpcId());
 	}
 	}
 }
 }

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/effects/L2Effect.java

@@ -160,7 +160,7 @@ public abstract class L2Effect implements IChanceSkillTrigger
 		
 		
 		if (((_skill.getId() > 2277) && (_skill.getId() < 2286)) || ((_skill.getId() >= 2512) && (_skill.getId() <= 2514)))
 		if (((_skill.getId() > 2277) && (_skill.getId() < 2286)) || ((_skill.getId() >= 2512) && (_skill.getId() <= 2514)))
 		{
 		{
-			if ((_effected instanceof L2ServitorInstance) || ((_effected instanceof L2PcInstance) && (((L2PcInstance) _effected).getPet() instanceof L2ServitorInstance)))
+			if ((_effected instanceof L2ServitorInstance) || ((_effected instanceof L2PcInstance) && (((L2PcInstance) _effected).getSummon() instanceof L2ServitorInstance)))
 			{
 			{
 				temp /= 2;
 				temp /= 2;
 			}
 			}

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/BlockCheckerEngine.java

@@ -384,9 +384,9 @@ public final class BlockCheckerEngine
 				}
 				}
 				player.stopAllEffects();
 				player.stopAllEffects();
 				
 				
-				if (player.getPet() != null)
+				if (player.hasSummon())
 				{
 				{
-					player.getPet().unSummon(player);
+					player.getSummon().unSummon(player);
 				}
 				}
 				
 				
 				// Give the player start up effects
 				// Give the player start up effects

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java

@@ -598,9 +598,9 @@ public class Siege implements Siegable
 					}
 					}
 					
 					
 					player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
 					player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
-					if (member.getPet() != null)
+					if (member.hasSummon())
 					{
 					{
-						player.sendPacket(new RelationChanged(member.getPet(), member.getRelation(player), member.isAutoAttackable(player)));
+						player.sendPacket(new RelationChanged(member.getSummon(), member.getRelation(player), member.isAutoAttackable(player)));
 					}
 					}
 				}
 				}
 			}
 			}
@@ -647,9 +647,9 @@ public class Siege implements Siegable
 						continue;
 						continue;
 					}
 					}
 					player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
 					player.sendPacket(new RelationChanged(member, member.getRelation(player), member.isAutoAttackable(player)));
-					if (member.getPet() != null)
+					if (member.hasSummon())
 					{
 					{
-						player.sendPacket(new RelationChanged(member.getPet(), member.getRelation(player), member.isAutoAttackable(player)));
+						player.sendPacket(new RelationChanged(member.getSummon(), member.getRelation(player), member.isAutoAttackable(player)));
 					}
 					}
 				}
 				}
 			}
 			}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/TvTEventTeleporter.java

@@ -63,7 +63,7 @@ public class TvTEventTeleporter implements Runnable
 			return;
 			return;
 		}
 		}
 		
 		
-		L2Summon summon = _playerInstance.getPet();
+		L2Summon summon = _playerInstance.getSummon();
 		
 		
 		if (summon != null)
 		if (summon != null)
 		{
 		{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java

@@ -870,7 +870,7 @@ public final class L2ItemInstance extends L2Object
 		return ((!isEquipped()) // Not equipped
 		return ((!isEquipped()) // Not equipped
 			&& (getItem().getType2() != L2Item.TYPE2_QUEST) // Not Quest Item
 			&& (getItem().getType2() != L2Item.TYPE2_QUEST) // Not Quest Item
 			&& ((getItem().getType2() != L2Item.TYPE2_MONEY) || (getItem().getType1() != L2Item.TYPE1_SHIELD_ARMOR)) // not money, not shield
 			&& ((getItem().getType2() != L2Item.TYPE2_MONEY) || (getItem().getType1() != L2Item.TYPE1_SHIELD_ARMOR)) // not money, not shield
-			&& ((player.getPet() == null) || (getObjectId() != player.getPet().getControlObjectId())) // Not Control item of currently summoned pet
+			&& (!player.hasSummon() || (getObjectId() != player.getSummon().getControlObjectId())) // Not Control item of currently summoned pet
 			&& (player.getActiveEnchantItem() != this) // Not momentarily used enchant scroll
 			&& (player.getActiveEnchantItem() != this) // Not momentarily used enchant scroll
 			&& (allowAdena || (getItemId() != PcInventory.ADENA_ID)) // Not Adena
 			&& (allowAdena || (getItemId() != PcInventory.ADENA_ID)) // Not Adena
 			&& ((player.getCurrentSkill() == null) || (player.getCurrentSkill().getSkill().getItemConsumeId() != getItemId())) && (!player.isCastingSimultaneouslyNow() || (player.getLastSimultaneousSkillCast() == null) || (player.getLastSimultaneousSkillCast().getItemConsumeId() != getItemId())) && (allowNonTradeable || (isTradeable() && (!((getItem().getItemType() == L2EtcItemType.PET_COLLAR) && player.havePetInvItems())))));
 			&& ((player.getCurrentSkill() == null) || (player.getCurrentSkill().getSkill().getItemConsumeId() != getItemId())) && (!player.isCastingSimultaneouslyNow() || (player.getLastSimultaneousSkillCast() == null) || (player.getLastSimultaneousSkillCast().getItemConsumeId() != getItemId())) && (allowNonTradeable || (isTradeable() && (!((getItem().getItemType() == L2EtcItemType.PET_COLLAR) && player.havePetInvItems())))));

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/olympiad/AbstractOlympiadGame.java

@@ -259,9 +259,9 @@ public abstract class AbstractOlympiadGame
 			player.setCurrentMp(player.getMaxMp());
 			player.setCurrentMp(player.getMaxMp());
 			
 			
 			// Remove Summon's Buffs
 			// Remove Summon's Buffs
-			final L2Summon summon = player.getPet();
-			if (summon != null)
+			if (player.hasSummon())
 			{
 			{
+				final L2Summon summon = player.getSummon();
 				summon.stopAllEffectsExceptThoseThatLastThroughDeath();
 				summon.stopAllEffectsExceptThoseThatLastThroughDeath();
 				summon.abortAttack();
 				summon.abortAttack();
 				summon.abortCast();
 				summon.abortCast();
@@ -344,7 +344,7 @@ public abstract class AbstractOlympiadGame
 			{
 			{
 				player.setAgathionId(0);
 				player.setAgathionId(0);
 			}
 			}
-			final L2Summon summon = player.getPet();
+			final L2Summon summon = player.getSummon();
 			if ((summon != null) && !summon.isDead())
 			if ((summon != null) && !summon.isDead())
 			{
 			{
 				summon.setTarget(null);
 				summon.setTarget(null);

+ 2 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2Skill.java

@@ -1570,14 +1570,11 @@ public abstract class L2Skill implements IChanceSkillTrigger
 	
 	
 	public static final boolean addSummon(L2Character caster, L2PcInstance owner, int radius, boolean isDead)
 	public static final boolean addSummon(L2Character caster, L2PcInstance owner, int radius, boolean isDead)
 	{
 	{
-		final L2Summon summon = owner.getPet();
-		
-		if (summon == null)
+		if (!owner.hasSummon())
 		{
 		{
 			return false;
 			return false;
 		}
 		}
-		
-		return addCharacter(caster, summon, radius, isDead);
+		return addCharacter(caster, owner.getSummon(), radius, isDead);
 	}
 	}
 	
 	
 	public static final boolean addCharacter(L2Character caster, L2Character target, int radius, boolean isDead)
 	public static final boolean addCharacter(L2Character caster, L2Character target, int radius, boolean isDead)

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillCreateItem.java

@@ -18,7 +18,6 @@ import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.PetItemList;
 import com.l2jserver.gameserver.network.serverpackets.PetItemList;
@@ -69,7 +68,7 @@ public class L2SkillCreateItem extends L2Skill
 			else if (activeChar.isPet())
 			else if (activeChar.isPet())
 			{
 			{
 				activeChar.getInventory().addItem("Skill", _createItemId[rndid], count, player, activeChar);
 				activeChar.getInventory().addItem("Skill", _createItemId[rndid], count, player, activeChar);
-				player.sendPacket(new PetItemList((L2PetInstance) activeChar));
+				player.sendPacket(new PetItemList(activeChar.getInventory().getItems()));
 			}
 			}
 		}
 		}
 	}
 	}

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillDecoy.java

@@ -50,13 +50,12 @@ public class L2SkillDecoy extends L2Skill
 		}
 		}
 		
 		
 		final L2PcInstance activeChar = caster.getActingPlayer();
 		final L2PcInstance activeChar = caster.getActingPlayer();
-		
 		if (activeChar.inObserverMode())
 		if (activeChar.inObserverMode())
 		{
 		{
 			return;
 			return;
 		}
 		}
 		
 		
-		if ((activeChar.getPet() != null) || activeChar.isMounted())
+		if (activeChar.hasSummon() || activeChar.isMounted())
 		{
 		{
 			return;
 			return;
 		}
 		}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillMount.java

@@ -78,7 +78,7 @@ public class L2SkillMount extends L2Skill
 			return;
 			return;
 		}
 		}
 		
 		
-		if ((activePlayer.getPet() != null) || activePlayer.isMounted())
+		if (activePlayer.hasSummon() || activePlayer.isMounted())
 		{
 		{
 			activePlayer.sendPacket(SystemMessageId.YOU_ALREADY_HAVE_A_PET);
 			activePlayer.sendPacket(SystemMessageId.YOU_ALREADY_HAVE_A_PET);
 			return;
 			return;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillSummon.java

@@ -124,7 +124,7 @@ public class L2SkillSummon extends L2Skill
 				{
 				{
 					return false;
 					return false;
 				}
 				}
-				if (player.getPet() != null)
+				if (player.hasSummon())
 				{
 				{
 					activeChar.sendPacket(SystemMessageId.YOU_ALREADY_HAVE_A_PET);
 					activeChar.sendPacket(SystemMessageId.YOU_ALREADY_HAVE_A_PET);
 					return false;
 					return false;
@@ -240,7 +240,7 @@ public class L2SkillSummon extends L2Skill
 			return;
 			return;
 		}
 		}
 		
 		
-		if ((activeChar.getPet() != null) || activeChar.isMounted())
+		if (activeChar.hasSummon() || activeChar.isMounted())
 		{
 		{
 			if (Config.DEBUG)
 			if (Config.DEBUG)
 			{
 			{

+ 2 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2OlympiadStadiumZone.java

@@ -24,7 +24,6 @@ import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2OlympiadManagerInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2OlympiadManagerInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -296,10 +295,9 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
 		{
 		{
 			if (_player != null)
 			if (_player != null)
 			{
 			{
-				final L2Summon summon = _player.getPet();
-				if (summon != null)
+				if (_player.hasSummon())
 				{
 				{
-					summon.unSummon(_player);
+					_player.getSummon().unSummon(_player);
 				}
 				}
 				
 				
 				_player.teleToLocation(MapRegionManager.TeleportWhereType.Town);
 				_player.teleToLocation(MapRegionManager.TeleportWhereType.Town);

+ 7 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/network/L2GameClient.java

@@ -747,15 +747,15 @@ public final class L2GameClient extends MMOClient<MMOConnection<L2GameClient>> i
 						getActiveChar().leaveParty();
 						getActiveChar().leaveParty();
 						
 						
 						// If the L2PcInstance has Pet, unsummon it
 						// If the L2PcInstance has Pet, unsummon it
-						if (getActiveChar().getPet() != null)
+						if (getActiveChar().hasSummon())
 						{
 						{
-							getActiveChar().getPet().setRestoreSummon(true);
+							getActiveChar().getSummon().setRestoreSummon(true);
 							
 							
-							getActiveChar().getPet().unSummon(getActiveChar());
+							getActiveChar().getSummon().unSummon(getActiveChar());
 							// Dead pet wasn't unsummoned, broadcast npcinfo changes (pet will be without owner name - means owner offline)
 							// Dead pet wasn't unsummoned, broadcast npcinfo changes (pet will be without owner name - means owner offline)
-							if (getActiveChar().getPet() != null)
+							if (getActiveChar().getSummon() != null)
 							{
 							{
-								getActiveChar().getPet().broadcastNpcInfo(0);
+								getActiveChar().getSummon().broadcastNpcInfo(0);
 							}
 							}
 						}
 						}
 						
 						
@@ -895,9 +895,9 @@ public final class L2GameClient extends MMOClient<MMOConnection<L2GameClient>> i
 				if ((player != null) && player.isOnline()) // safety precaution
 				if ((player != null) && player.isOnline()) // safety precaution
 				{
 				{
 					saveCharToDisk();
 					saveCharToDisk();
-					if (player.getPet() != null)
+					if (player.hasSummon())
 					{
 					{
-						player.getPet().store();
+						player.getSummon().store();
 					}
 					}
 				}
 				}
 			}
 			}

+ 29 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/SystemMessageId.java

@@ -34,7 +34,7 @@ import com.l2jserver.gameserver.model.clientstrings.Builder;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 
 /**
 /**
- * @author Noctarius & Nille02 & crion ^ Forsaiken
+ * @author Noctarius, Nille02, crion, Forsaiken
  */
  */
 public final class SystemMessageId
 public final class SystemMessageId
 {
 {
@@ -13479,6 +13479,18 @@ public final class SystemMessageId
 	 */
 	 */
 	public static final SystemMessageId RESURRECT_USING_CHARM_OF_COURAGE;
 	public static final SystemMessageId RESURRECT_USING_CHARM_OF_COURAGE;
 	
 	
+	/**
+	 * ID: 2311<br>
+	 * Message: You do not have a servitor.
+	 */
+	public static final SystemMessageId DONT_HAVE_SERVITOR;
+	
+	/**
+	 * ID: 2312<br>
+	 * Message: You do not have a pet.
+	 */
+	public static final SystemMessageId DONT_HAVE_PET;
+	
 	/**
 	/**
 	 * ID: 2314<br>
 	 * ID: 2314<br>
 	 * Message: Your Vitality is at maximum.
 	 * Message: Your Vitality is at maximum.
@@ -13869,6 +13881,12 @@ public final class SystemMessageId
 	 */
 	 */
 	public static final SystemMessageId OLYMPIAD_3VS3_CONFIRM;
 	public static final SystemMessageId OLYMPIAD_3VS3_CONFIRM;
 	
 	
+	/**
+	 * ID: 2466<br>
+	 * Message: A pet on auxiliary mode cannot use skills.
+	 */
+	public static final SystemMessageId PET_AUXILIARY_MODE_CANNOT_USE_SKILLS;
+	
 	/**
 	/**
 	 * ID: 2491<br>
 	 * ID: 2491<br>
 	 * Message: Your ship cannot teleport because it does not have enough fuel for the trip.
 	 * Message: Your ship cannot teleport because it does not have enough fuel for the trip.
@@ -14900,6 +14918,12 @@ public final class SystemMessageId
 	 */
 	 */
 	public static final SystemMessageId MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING;
 	public static final SystemMessageId MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING;
 	
 	
+	/**
+	 * ID: 3260<br>
+	 * Message: You cannot use the skill because the servitor has not been summoned.
+	 */
+	public static final SystemMessageId CANNOT_USE_SKILL_WITHOUT_SERVITOR;
+	
 	/**
 	/**
 	 * ID: 3261<br>
 	 * ID: 3261<br>
 	 * Message: You have $s1 match(es) remaining that you can participate in this week ($s2 1 vs 1 Class matches, $s3 1 vs 1 matches, & $s4 3 vs 3 Team matches).
 	 * Message: You have $s1 match(es) remaining that you can participate in this week ($s2 1 vs 1 Class matches, $s3 1 vs 1 matches, & $s4 3 vs 3 Team matches).
@@ -17171,6 +17195,8 @@ public final class SystemMessageId
 		S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1 = new SystemMessageId(2304);
 		S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1 = new SystemMessageId(2304);
 		S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1 = new SystemMessageId(2305);
 		S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1 = new SystemMessageId(2305);
 		RESURRECT_USING_CHARM_OF_COURAGE = new SystemMessageId(2306);
 		RESURRECT_USING_CHARM_OF_COURAGE = new SystemMessageId(2306);
+		DONT_HAVE_SERVITOR = new SystemMessageId(2311);
+		DONT_HAVE_PET = new SystemMessageId(2312);
 		VITALITY_IS_AT_MAXIMUM = new SystemMessageId(2314);
 		VITALITY_IS_AT_MAXIMUM = new SystemMessageId(2314);
 		VITALITY_HAS_INCREASED = new SystemMessageId(2315);
 		VITALITY_HAS_INCREASED = new SystemMessageId(2315);
 		VITALITY_HAS_DECREASED = new SystemMessageId(2316);
 		VITALITY_HAS_DECREASED = new SystemMessageId(2316);
@@ -17236,6 +17262,7 @@ public final class SystemMessageId
 		THE_AIRSHIP_FUEL_SOON_RUN_OUT = new SystemMessageId(2463);
 		THE_AIRSHIP_FUEL_SOON_RUN_OUT = new SystemMessageId(2463);
 		THE_AIRSHIP_FUEL_RUN_OUT = new SystemMessageId(2464);
 		THE_AIRSHIP_FUEL_RUN_OUT = new SystemMessageId(2464);
 		OLYMPIAD_3VS3_CONFIRM = new SystemMessageId(2465);
 		OLYMPIAD_3VS3_CONFIRM = new SystemMessageId(2465);
+		PET_AUXILIARY_MODE_CANNOT_USE_SKILLS = new SystemMessageId(2466);
 		THE_AIRSHIP_CANNOT_TELEPORT = new SystemMessageId(2491);
 		THE_AIRSHIP_CANNOT_TELEPORT = new SystemMessageId(2491);
 		THE_AIRSHIP_SUMMONED = new SystemMessageId(2492);
 		THE_AIRSHIP_SUMMONED = new SystemMessageId(2492);
 		THE_COLLECTION_HAS_SUCCEEDED = new SystemMessageId(2500);
 		THE_COLLECTION_HAS_SUCCEEDED = new SystemMessageId(2500);
@@ -17408,6 +17435,7 @@ public final class SystemMessageId
 		ARCANE_SHIELD_DECREASED_YOUR_MP_BY_S1_INSTEAD_OF_HP = new SystemMessageId(3255);
 		ARCANE_SHIELD_DECREASED_YOUR_MP_BY_S1_INSTEAD_OF_HP = new SystemMessageId(3255);
 		YOU_EARNED_S1_EXP_BONUS_S2_AND_S3_SP_BONUS_S4 = new SystemMessageId(3259);
 		YOU_EARNED_S1_EXP_BONUS_S2_AND_S3_SP_BONUS_S4 = new SystemMessageId(3259);
 		MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING = new SystemMessageId(3256);
 		MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING = new SystemMessageId(3256);
+		CANNOT_USE_SKILL_WITHOUT_SERVITOR = new SystemMessageId(3260);
 		YOU_HAVE_S1_MATCHES_REMAINING_THAT_YOU_CAN_PARTECIPATE_IN_THIS_WEEK_S2_CLASSED_S3_NON_CLASSED_S4_TEAM = new SystemMessageId(3261);
 		YOU_HAVE_S1_MATCHES_REMAINING_THAT_YOU_CAN_PARTECIPATE_IN_THIS_WEEK_S2_CLASSED_S3_NON_CLASSED_S4_TEAM = new SystemMessageId(3261);
 		SAFE_ENCHANT_FAILED = new SystemMessageId(6004);
 		SAFE_ENCHANT_FAILED = new SystemMessageId(6004);
 		YOU_CANNOT_BOOKMARK_THIS_LOCATION_BECAUSE_YOU_DO_NOT_HAVE_A_MY_TELEPORT_FLAG = new SystemMessageId(6501);
 		YOU_CANNOT_BOOKMARK_THIS_LOCATION_BECAUSE_YOU_DO_NOT_HAVE_A_MY_TELEPORT_FLAG = new SystemMessageId(6501);

+ 15 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/L2GameClientPacket.java

@@ -23,8 +23,10 @@ import org.mmocore.network.ReceivablePacket;
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 
 /**
 /**
  * Packets received by the game server from clients
  * Packets received by the game server from clients
@@ -92,11 +94,24 @@ public abstract class L2GameClientPacket extends ReceivablePacket<L2GameClient>
 	
 	
 	protected abstract void runImpl();
 	protected abstract void runImpl();
 	
 	
+	/**
+	 * Sends a game server packet to the client.
+	 * @param gsp the game server packet
+	 */
 	protected final void sendPacket(L2GameServerPacket gsp)
 	protected final void sendPacket(L2GameServerPacket gsp)
 	{
 	{
 		getClient().sendPacket(gsp);
 		getClient().sendPacket(gsp);
 	}
 	}
 	
 	
+	/**
+	 * Sends a system message to the client.
+	 * @param id the system message Id
+	 */
+	public void sendPacket(SystemMessageId id)
+	{
+		sendPacket(SystemMessage.getSystemMessage(id));
+	}
+	
 	/**
 	/**
 	 * @return A String with this packet name for debugging purposes
 	 * @return A String with this packet name for debugging purposes
 	 */
 	 */

File diff suppressed because it is too large
+ 305 - 353
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java


+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAutoSoulShot.java

@@ -76,11 +76,11 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 					// Attempt to charge first shot on activation
 					// Attempt to charge first shot on activation
 					if ((_itemId == 6645) || (_itemId == 6646) || (_itemId == 6647) || (_itemId == 20332) || (_itemId == 20333) || (_itemId == 20334))
 					if ((_itemId == 6645) || (_itemId == 6646) || (_itemId == 6647) || (_itemId == 20332) || (_itemId == 20333) || (_itemId == 20334))
 					{
 					{
-						if (activeChar.getPet() != null)
+						if (activeChar.hasSummon())
 						{
 						{
 							if (item.getEtcItem().getHandlerName().equals("BeastSoulShot"))
 							if (item.getEtcItem().getHandlerName().equals("BeastSoulShot"))
 							{
 							{
-								if (activeChar.getPet().getSoulShotsPerHit() > item.getCount())
+								if (activeChar.getSummon().getSoulShotsPerHit() > item.getCount())
 								{
 								{
 									activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET);
 									activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET);
 									return;
 									return;
@@ -88,7 +88,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 							}
 							}
 							else
 							else
 							{
 							{
-								if (activeChar.getPet().getSpiritShotsPerHit() > item.getCount())
+								if (activeChar.getSummon().getSpiritShotsPerHit() > item.getCount())
 								{
 								{
 									activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET);
 									activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_SOULSHOTS_FOR_PET);
 									return;
 									return;
@@ -103,7 +103,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 							activeChar.sendPacket(sm);
 							activeChar.sendPacket(sm);
 							
 							
 							activeChar.rechargeShots(true, true);
 							activeChar.rechargeShots(true, true);
-							activeChar.getPet().rechargeShots(true, true);
+							activeChar.getSummon().rechargeShots(true, true);
 							
 							
 						}
 						}
 						else
 						else

+ 13 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestChangePetName.java

@@ -44,29 +44,38 @@ public final class RequestChangePetName extends L2GameClientPacket
 			return;
 			return;
 		}
 		}
 		
 		
-		final L2Summon pet = activeChar.getPet();
+		final L2Summon pet = activeChar.getSummon();
 		if (pet == null)
 		if (pet == null)
 		{
 		{
 			return;
 			return;
 		}
 		}
 		
 		
+		if (!pet.isPet())
+		{
+			activeChar.sendPacket(SystemMessageId.DONT_HAVE_PET);
+			return;
+		}
+		
 		if (pet.getName() != null)
 		if (pet.getName() != null)
 		{
 		{
 			activeChar.sendPacket(SystemMessageId.NAMING_YOU_CANNOT_SET_NAME_OF_THE_PET);
 			activeChar.sendPacket(SystemMessageId.NAMING_YOU_CANNOT_SET_NAME_OF_THE_PET);
 			return;
 			return;
 		}
 		}
-		else if (PetNameTable.getInstance().doesPetNameExist(_name, pet.getTemplate().getNpcId()))
+		
+		if (PetNameTable.getInstance().doesPetNameExist(_name, pet.getTemplate().getNpcId()))
 		{
 		{
 			activeChar.sendPacket(SystemMessageId.NAMING_ALREADY_IN_USE_BY_ANOTHER_PET);
 			activeChar.sendPacket(SystemMessageId.NAMING_ALREADY_IN_USE_BY_ANOTHER_PET);
 			return;
 			return;
 		}
 		}
-		else if ((_name.length() < 3) || (_name.length() > 16))
+		
+		if ((_name.length() < 3) || (_name.length() > 16))
 		{
 		{
 			// activeChar.sendPacket(SystemMessageId.NAMING_PETNAME_UP_TO_8CHARS);
 			// activeChar.sendPacket(SystemMessageId.NAMING_PETNAME_UP_TO_8CHARS);
 			activeChar.sendMessage("Your pet's name can be up to 16 characters in length.");
 			activeChar.sendMessage("Your pet's name can be up to 16 characters in length.");
 			return;
 			return;
 		}
 		}
-		else if (!PetNameTable.getInstance().isValidPetName(_name))
+		
+		if (!PetNameTable.getInstance().isValidPetName(_name))
 		{
 		{
 			activeChar.sendPacket(SystemMessageId.NAMING_PETNAME_CONTAINS_INVALID_CHARS);
 			activeChar.sendPacket(SystemMessageId.NAMING_PETNAME_CONTAINS_INVALID_CHARS);
 			return;
 			return;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDestroyItem.java

@@ -142,9 +142,9 @@ public final class RequestDestroyItem extends L2GameClientPacket
 		
 		
 		if (itemToRemove.getItem().isPetItem())
 		if (itemToRemove.getItem().isPetItem())
 		{
 		{
-			if ((activeChar.getPet() != null) && (activeChar.getPet().getControlObjectId() == _objectId))
+			if (activeChar.hasSummon() && (activeChar.getSummon().getControlObjectId() == _objectId))
 			{
 			{
-				activeChar.getPet().unSummon(activeChar);
+				activeChar.getSummon().unSummon(activeChar);
 			}
 			}
 			
 			
 			try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			try (Connection con = L2DatabaseFactory.getInstance().getConnection();

+ 2 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDispel.java

@@ -16,7 +16,6 @@ package com.l2jserver.gameserver.network.clientpackets;
 
 
 import com.l2jserver.Config;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 
 
@@ -74,10 +73,9 @@ public class RequestDispel extends L2GameClientPacket
 		}
 		}
 		else
 		else
 		{
 		{
-			final L2Summon pet = activeChar.getPet();
-			if ((pet != null) && (pet.getObjectId() == _objectId))
+			if (activeChar.hasSummon() && (activeChar.getSummon().getObjectId() == _objectId))
 			{
 			{
-				pet.stopSkillEffects(_skillId);
+				activeChar.getSummon().stopSkillEffects(_skillId);
 			}
 			}
 		}
 		}
 	}
 	}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestGetItemFromPet.java

@@ -43,8 +43,8 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 	@Override
 	@Override
 	protected void runImpl()
 	protected void runImpl()
 	{
 	{
-		L2PcInstance player = getClient().getActiveChar();
-		if ((player == null) || !(player.getPet() instanceof L2PetInstance))
+		final L2PcInstance player = getClient().getActiveChar();
+		if ((player == null) || !player.hasSummon() || !player.getSummon().isPet())
 		{
 		{
 			return;
 			return;
 		}
 		}
@@ -55,7 +55,7 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 			return;
 			return;
 		}
 		}
 		
 		
-		L2PetInstance pet = (L2PetInstance) player.getPet();
+		final L2PetInstance pet = (L2PetInstance) player.getSummon();
 		if (player.getActiveEnchantItem() != null)
 		if (player.getActiveEnchantItem() != null)
 		{
 		{
 			return;
 			return;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestGiveItemToPet.java

@@ -42,7 +42,7 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 	protected void runImpl()
 	protected void runImpl()
 	{
 	{
 		final L2PcInstance player = getClient().getActiveChar();
 		final L2PcInstance player = getClient().getActiveChar();
-		if ((player == null) || !(player.getPet() instanceof L2PetInstance))
+		if ((player == null) || !player.hasSummon() || !player.getSummon().isPet())
 		{
 		{
 			return;
 			return;
 		}
 		}
@@ -86,7 +86,7 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 			return;
 			return;
 		}
 		}
 		
 		
-		final L2PetInstance pet = (L2PetInstance) player.getPet();
+		final L2PetInstance pet = (L2PetInstance) player.getSummon();
 		if (pet.isDead())
 		if (pet.isDead())
 		{
 		{
 			player.sendPacket(SystemMessageId.CANNOT_GIVE_ITEMS_TO_DEAD_PET);
 			player.sendPacket(SystemMessageId.CANNOT_GIVE_ITEMS_TO_DEAD_PET);

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java

@@ -89,7 +89,7 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 			return;
 			return;
 		}
 		}
 		
 		
-		if (activeChar.getPet() != null)
+		if (activeChar.hasSummon())
 		{
 		{
 			activeChar.sendPacket(SystemMessageId.RELEASE_PET_ON_BOAT);
 			activeChar.sendPacket(SystemMessageId.RELEASE_PET_ON_BOAT);
 			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			activeChar.sendPacket(ActionFailed.STATIC_PACKET);

+ 8 - 15
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestPetGetItem.java

@@ -19,14 +19,9 @@ import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.instancemanager.MercTicketManager;
 import com.l2jserver.gameserver.instancemanager.MercTicketManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 
-/**
- * This class ...
- * @version $Revision: 1.2.4.4 $ $Date: 2005/03/29 23:15:33 $
- */
 public final class RequestPetGetItem extends L2GameClientPacket
 public final class RequestPetGetItem extends L2GameClientPacket
 {
 {
 	private static final String _C__98_REQUESTPETGETITEM = "[C] 98 RequestPetGetItem";
 	private static final String _C__98_REQUESTPETGETITEM = "[C] 98 RequestPetGetItem";
@@ -44,34 +39,32 @@ public final class RequestPetGetItem extends L2GameClientPacket
 	{
 	{
 		L2World world = L2World.getInstance();
 		L2World world = L2World.getInstance();
 		L2ItemInstance item = (L2ItemInstance) world.findObject(_objectId);
 		L2ItemInstance item = (L2ItemInstance) world.findObject(_objectId);
-		if ((item == null) || (getClient().getActiveChar() == null))
+		if ((item == null) || (getActiveChar() == null) || !getActiveChar().hasSummon() || !getActiveChar().getSummon().isPet())
 		{
 		{
+			sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 			return;
 		}
 		}
 		
 		
-		int castleId = MercTicketManager.getInstance().getTicketCastleId(item.getItemId());
+		final int castleId = MercTicketManager.getInstance().getTicketCastleId(item.getItemId());
 		if (castleId > 0)
 		if (castleId > 0)
 		{
 		{
 			sendPacket(ActionFailed.STATIC_PACKET);
 			sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 			return;
 		}
 		}
 		
 		
-		if (getClient().getActiveChar().getPet() instanceof L2ServitorInstance)
-		{
-			sendPacket(ActionFailed.STATIC_PACKET);
-			return;
-		}
-		L2PetInstance pet = (L2PetInstance) getClient().getActiveChar().getPet();
-		if ((pet == null) || pet.isDead() || pet.isOutOfControl())
+		if (FortSiegeManager.getInstance().isCombat(item.getItemId()))
 		{
 		{
 			sendPacket(ActionFailed.STATIC_PACKET);
 			sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 			return;
 		}
 		}
-		if (FortSiegeManager.getInstance().isCombat(item.getItemId()))
+		
+		final L2PetInstance pet = (L2PetInstance) getClient().getActiveChar().getSummon();
+		if (pet.isDead() || pet.isOutOfControl())
 		{
 		{
 			sendPacket(ActionFailed.STATIC_PACKET);
 			sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 			return;
 		}
 		}
+		
 		pet.getAI().setIntention(CtrlIntention.AI_INTENTION_PICK_UP, item);
 		pet.getAI().setIntention(CtrlIntention.AI_INTENTION_PICK_UP, item);
 	}
 	}
 	
 	

+ 3 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java

@@ -42,13 +42,7 @@ public final class RequestPetUseItem extends L2GameClientPacket
 	protected void runImpl()
 	protected void runImpl()
 	{
 	{
 		final L2PcInstance activeChar = getClient().getActiveChar();
 		final L2PcInstance activeChar = getClient().getActiveChar();
-		if ((activeChar == null) || (activeChar.getPet() == null) || !(activeChar.getPet() instanceof L2PetInstance))
-		{
-			return;
-		}
-		
-		final L2PetInstance pet = (L2PetInstance) activeChar.getPet();
-		if (pet == null)
+		if ((activeChar == null) || !activeChar.hasSummon() || !activeChar.getSummon().isPet())
 		{
 		{
 			return;
 			return;
 		}
 		}
@@ -58,6 +52,7 @@ public final class RequestPetUseItem extends L2GameClientPacket
 			return;
 			return;
 		}
 		}
 		
 		
+		final L2PetInstance pet = (L2PetInstance) activeChar.getSummon();
 		final L2ItemInstance item = pet.getInventory().getItemByObjectId(_objectId);
 		final L2ItemInstance item = pet.getInventory().getItemByObjectId(_objectId);
 		if (item == null)
 		if (item == null)
 		{
 		{
@@ -116,7 +111,7 @@ public final class RequestPetUseItem extends L2GameClientPacket
 				pet.getInventory().equipItem(item);
 				pet.getInventory().equipItem(item);
 			}
 			}
 			
 			
-			activeChar.sendPacket(new PetItemList(pet));
+			activeChar.sendPacket(new PetItemList(pet.getInventory().getItems()));
 			pet.updateAndBroadcastStatus(1);
 			pet.updateAndBroadcastStatus(1);
 		}
 		}
 		else
 		else

+ 10 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PartySmallWindowAll.java

@@ -59,17 +59,17 @@ public final class PartySmallWindowAll extends L2GameServerPacket
 				writeD(member.getRace().ordinal());
 				writeD(member.getRace().ordinal());
 				writeD(0x00); // T2.3
 				writeD(0x00); // T2.3
 				writeD(0x00); // T2.3
 				writeD(0x00); // T2.3
-				if (member.getPet() != null)
+				if (member.hasSummon())
 				{
 				{
-					writeD(member.getPet().getObjectId());
-					writeD(member.getPet().getNpcId() + 1000000);
-					writeD(member.getPet().getSummonType());
-					writeS(member.getPet().getName());
-					writeD((int) member.getPet().getCurrentHp());
-					writeD(member.getPet().getMaxHp());
-					writeD((int) member.getPet().getCurrentMp());
-					writeD(member.getPet().getMaxMp());
-					writeD(member.getPet().getLevel());
+					writeD(member.getSummon().getObjectId());
+					writeD(member.getSummon().getNpcId() + 1000000);
+					writeD(member.getSummon().getSummonType());
+					writeS(member.getSummon().getName());
+					writeD((int) member.getSummon().getCurrentHp());
+					writeD(member.getSummon().getMaxHp());
+					writeD((int) member.getSummon().getCurrentMp());
+					writeD(member.getSummon().getMaxMp());
+					writeD(member.getSummon().getLevel());
 				}
 				}
 				else
 				else
 				{
 				{

+ 5 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PetItemList.java

@@ -14,16 +14,15 @@
  */
  */
 package com.l2jserver.gameserver.network.serverpackets;
 package com.l2jserver.gameserver.network.serverpackets;
 
 
-import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 
 
 public class PetItemList extends L2GameServerPacket
 public class PetItemList extends L2GameServerPacket
 {
 {
-	private final L2PetInstance _activeChar;
+	private final L2ItemInstance[] _items;
 	
 	
-	public PetItemList(L2PetInstance character)
+	public PetItemList(L2ItemInstance[] items)
 	{
 	{
-		_activeChar = character;
+		_items = items;
 	}
 	}
 	
 	
 	@Override
 	@Override
@@ -31,11 +30,10 @@ public class PetItemList extends L2GameServerPacket
 	{
 	{
 		writeC(0xB3);
 		writeC(0xB3);
 		
 		
-		L2ItemInstance[] items = _activeChar.getInventory().getItems();
-		int count = items.length;
+		int count = _items.length;
 		writeH(count);
 		writeH(count);
 		
 		
-		for (L2ItemInstance temp : items)
+		for (L2ItemInstance temp : _items)
 		{
 		{
 			writeD(temp.getObjectId());
 			writeD(temp.getObjectId());
 			writeD(temp.getDisplayId());
 			writeD(temp.getDisplayId());

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/SellList.java

@@ -55,7 +55,7 @@ public class SellList extends L2GameServerPacket
 		{
 		{
 			for (L2ItemInstance item : _activeChar.getInventory().getItems())
 			for (L2ItemInstance item : _activeChar.getInventory().getItems())
 			{
 			{
-				if (!item.isEquipped() && item.isSellable() && ((_activeChar.getPet() == null) || (item.getObjectId() != _activeChar.getPet().getControlObjectId()))) // Pet is summoned and not the item that summoned the pet
+				if (!item.isEquipped() && item.isSellable() && (!_activeChar.hasSummon() || (item.getObjectId() != _activeChar.getSummon().getControlObjectId()))) // Pet is summoned and not the item that summoned the pet
 				{
 				{
 					_selllist.add(item);
 					_selllist.add(item);
 				}
 				}

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/taskmanager/AttackStanceTaskManager.java

@@ -113,9 +113,9 @@ public class AttackStanceTaskManager
 						{
 						{
 							actor.broadcastPacket(new AutoAttackStop(actor.getObjectId()));
 							actor.broadcastPacket(new AutoAttackStop(actor.getObjectId()));
 							actor.getAI().setAutoAttacking(false);
 							actor.getAI().setAutoAttacking(false);
-							if (actor.isPlayer() && actor.getActingPlayer().hasPet())
+							if (actor.isPlayer() && actor.getActingPlayer().hasSummon())
 							{
 							{
-								actor.getActingPlayer().getPet().broadcastPacket(new AutoAttackStop(actor.getActingPlayer().getPet().getObjectId()));
+								actor.getSummon().broadcastPacket(new AutoAttackStop(actor.getSummon().getObjectId()));
 							}
 							}
 						}
 						}
 						iter.remove();
 						iter.remove();

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java

@@ -89,9 +89,9 @@ public final class Broadcast
 					if ((oldrelation != null) && (oldrelation != relation))
 					if ((oldrelation != null) && (oldrelation != relation))
 					{
 					{
 						player.sendPacket(new RelationChanged((L2PcInstance) character, relation, character.isAutoAttackable(player)));
 						player.sendPacket(new RelationChanged((L2PcInstance) character, relation, character.isAutoAttackable(player)));
-						if (((L2PcInstance) character).getPet() != null)
+						if (((L2PcInstance) character).hasSummon())
 						{
 						{
-							player.sendPacket(new RelationChanged(((L2PcInstance) character).getPet(), relation, character.isAutoAttackable(player)));
+							player.sendPacket(new RelationChanged(character.getSummon(), relation, character.isAutoAttackable(player)));
 						}
 						}
 					}
 					}
 				}
 				}

+ 2 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/util/Evolve.java

@@ -27,7 +27,6 @@ import com.l2jserver.gameserver.datatables.SummonItemsData;
 import com.l2jserver.gameserver.model.L2SummonItem;
 import com.l2jserver.gameserver.model.L2SummonItem;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
@@ -50,15 +49,12 @@ public final class Evolve
 			return false;
 			return false;
 		}
 		}
 		
 		
-		L2Summon summon = player.getPet();
-		
-		if ((summon == null) || !(summon instanceof L2PetInstance))
+		if (!player.hasSummon() || !player.getSummon().isPet())
 		{
 		{
 			return false;
 			return false;
 		}
 		}
 		
 		
-		L2PetInstance currentPet = (L2PetInstance) summon;
-		
+		final L2PetInstance currentPet = (L2PetInstance) player.getSummon();
 		if (currentPet.isAlikeDead())
 		if (currentPet.isAlikeDead())
 		{
 		{
 			Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " tried to use death pet exploit!", Config.DEFAULT_PUNISH);
 			Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " tried to use death pet exploit!", Config.DEFAULT_PUNISH);

Some files were not shown because too many files changed in this diff