Selaa lähdekoodia

BETA: Rework of targeting system:
* Moved all the packets that must be sent on new target inside setTarget method in L2PcInstance instead of all over the sources.
* Cleaned up setTarget method in L2PcInstance
* Preventing from sent status update when hp/mp/cp was not changed.

Rumen Nikiforov 12 vuotta sitten
vanhempi
sitoutus
55a36d03cd
19 muutettua tiedostoa jossa 90 lisäystä ja 247 poistoa
  1. 10 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java
  2. 1 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/Location.java
  3. 2 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  4. 2 25
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Tower.java
  5. 0 15
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2BlockInstance.java
  6. 0 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ControllableAirShipInstance.java
  7. 0 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2DefenderInstance.java
  8. 0 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortBallistaInstance.java
  9. 0 15
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2GuardInstance.java
  10. 0 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2MerchantSummonInstance.java
  11. 50 38
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  12. 0 32
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
  13. 0 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SiegeFlagInstance.java
  14. 0 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TamedBeastInstance.java
  15. 0 16
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TerritoryWardInstance.java
  16. 4 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/CharStatus.java
  17. 2 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/PcStatus.java
  18. 11 17
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/MyTargetSelected.java
  19. 8 12
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ValidateLocation.java

+ 10 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -430,6 +430,11 @@ public abstract class L2Object
 		return getPosition().getZ();
 	}
 	
+	public int getHeading()
+	{
+		return 0;
+	}
+	
 	/**
 	 * Remove a L2Object from the world.<BR>
 	 * <BR>
@@ -917,4 +922,9 @@ public abstract class L2Object
 		}
 		return (T) _scripts.get(script.getName());
 	}
+	
+	public void removeStatusListener(L2Character object)
+	{
+		
+	}
 }

+ 1 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/Location.java

@@ -59,6 +59,7 @@ public class Location
 		_x = obj.getX();
 		_y = obj.getY();
 		_z = obj.getZ();
+		_heading = obj.getHeading();
 		_instanceId = obj.getInstanceId();
 	}
 	

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

@@ -4043,6 +4043,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder
 	/**
 	 * @return the orientation of the L2Character.
 	 */
+	@Override
 	public final int getHeading()
 	{
 		return _heading;
@@ -7226,6 +7227,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder
 		getStatus().reduceMp(i);
 	}
 	
+	@Override
 	public void removeStatusListener(L2Character object)
 	{
 		getStatus().removeStatusListener(object);

+ 2 - 25
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Tower.java

@@ -23,9 +23,6 @@ import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 
 /**
  * This class is a super-class for L2ControlTowerInstance and L2FlameTowerInstance.
@@ -61,29 +58,9 @@ public abstract class L2Tower extends L2Npc
 			return;
 		}
 		
-		// Check if the L2PcInstance already target the L2NpcInstance
-		if (this != player.getTarget())
+		if (interact)
 		{
-			// Set the target of the L2PcInstance player
-			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
-			StatusUpdate su = new StatusUpdate(this);
-			su.addAttribute(StatusUpdate.CUR_HP, (int) getStatus().getCurrentHp());
-			su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-			player.sendPacket(su);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
-		}
-		else if (interact)
-		{
-			if (isAutoAttackable(player) && (Math.abs(player.getZ() - getZ()) < 100 // Less then max height difference, delete check when geo
-			) && GeoData.getInstance().canSeeTarget(player, this))
+			if (isAutoAttackable(player) && (Math.abs(player.getZ() - getZ()) < 100) && GeoData.getInstance().canSeeTarget(player, this))
 			{
 				// Notify the L2PcInstance AI with AI_INTENTION_INTERACT
 				player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, this);

+ 0 - 15
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2BlockInstance.java

@@ -28,9 +28,6 @@ import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExCubeGameChangePoints;
 import com.l2jserver.gameserver.network.serverpackets.ExCubeGameExtendedChangePoints;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.util.Rnd;
 
 /**
@@ -145,21 +142,9 @@ public class L2BlockInstance extends L2MonsterInstance
 		{
 			player.setTarget(this);
 			getAI(); // wake up ai
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance activeChar
-			// The activeChar.getLevel() - getLevel() permit to display the correct color in the select window
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet StatusUpdate of the L2Npc to the L2PcInstance to update its HP bar
-			StatusUpdate su = new StatusUpdate(this);
-			su.addAttribute(StatusUpdate.CUR_HP, (int) getCurrentHp());
-			su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-			player.sendPacket(su);
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{
-			player.sendPacket(new ValidateLocation(this));
 			player.sendPacket(ActionFailed.STATIC_PACKET);
 		}
 	}

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

@@ -27,7 +27,6 @@ import com.l2jserver.gameserver.model.actor.stat.ControllableAirShipStat;
 import com.l2jserver.gameserver.model.actor.templates.L2CharTemplate;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.DeleteObject;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 public class L2ControllableAirShipInstance extends L2AirShipInstance
@@ -251,13 +250,6 @@ public class L2ControllableAirShipInstance extends L2AirShipInstance
 		super.oustPlayer(player);
 	}
 	
-	@Override
-	public void onAction(L2PcInstance player, boolean interact)
-	{
-		player.sendPacket(new MyTargetSelected(_helmId, 0));
-		super.onAction(player, interact);
-	}
-	
 	@Override
 	public void onSpawn()
 	{

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

@@ -37,9 +37,6 @@ import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.clanhall.SiegableHall;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 
 public class L2DefenderInstance extends L2Attackable
 {
@@ -195,19 +192,6 @@ public class L2DefenderInstance extends L2Attackable
 			
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
-			StatusUpdate su = new StatusUpdate(this);
-			su.addAttribute(StatusUpdate.CUR_HP, (int) getStatus().getCurrentHp());
-			su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-			player.sendPacket(su);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

+ 0 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortBallistaInstance.java

@@ -25,8 +25,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 
 public class L2FortBallistaInstance extends L2Npc
 {
@@ -79,13 +77,6 @@ public class L2FortBallistaInstance extends L2Npc
 		{
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

+ 0 - 15
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2GuardInstance.java

@@ -35,9 +35,7 @@ import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest.QuestEventType;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2jserver.gameserver.network.serverpackets.SocialAction;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.util.Rnd;
 
 /**
@@ -188,21 +186,8 @@ public class L2GuardInstance extends L2Attackable
 		// Check if the L2PcInstance already target the L2GuardInstance
 		if (getObjectId() != player.getTargetId())
 		{
-			if (Config.DEBUG)
-			{
-				_log.fine(player.getObjectId() + ": Targetted guard " + getObjectId());
-			}
-			
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			// The color to display in the select window is White
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

+ 0 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2MerchantSummonInstance.java

@@ -33,10 +33,8 @@ import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.BuyList;
 import com.l2jserver.gameserver.network.serverpackets.ExBuySellList;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.SellList;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 
 /**
  * @author Kerberos
@@ -170,13 +168,6 @@ public class L2MerchantSummonInstance extends L2ServitorInstance
 		{
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			final MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

+ 50 - 38
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -269,6 +269,7 @@ import com.l2jserver.gameserver.network.serverpackets.ItemList;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.LeaveWorld;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
+import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2jserver.gameserver.network.serverpackets.NicknameChanged;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.ObservationMode;
@@ -305,6 +306,7 @@ import com.l2jserver.gameserver.network.serverpackets.TradeDone;
 import com.l2jserver.gameserver.network.serverpackets.TradeOtherDone;
 import com.l2jserver.gameserver.network.serverpackets.TradeStart;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
+import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.gameserver.scripting.scriptengine.events.EquipmentEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.events.HennaEvent;
 import com.l2jserver.gameserver.scripting.scriptengine.events.ProfessionChangeEvent;
@@ -316,6 +318,7 @@ import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerDe
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.ProfessionChangeListener;
 import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.TransformListener;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
+import com.l2jserver.gameserver.util.Broadcast;
 import com.l2jserver.gameserver.util.FloodProtectors;
 import com.l2jserver.gameserver.util.PlayerEventStatus;
 import com.l2jserver.gameserver.util.Point3D;
@@ -5198,51 +5201,38 @@ public final class L2PcInstance extends L2Playable
 	}
 	
 	/**
-	 * Set a target. <B><U> Actions</U> :</B> <li>Remove the L2PcInstance from the _statusListener of the old target if it was a L2Character</li> <li>Add the L2PcInstance to the _statusListener of the new target if it's a L2Character</li> <li>Target the new L2Object (add the target to the
-	 * L2PcInstance _target, _knownObject and L2PcInstance to _KnownObject of the L2Object)</li>
+	 * Set a target. <B><U> Actions</U> :</B>
+	 * <ul>
+	 * <li>Remove the L2PcInstance from the _statusListener of the old target if it was a L2Character</li>
+	 * <li>Add the L2PcInstance to the _statusListener of the new target if it's a L2Character</li>
+	 * <li>Target the new L2Object (add the target to the L2PcInstance _target, _knownObject and L2PcInstance to _KnownObject of the L2Object)</li>
+	 * </ul>
 	 * @param newTarget The L2Object to target
 	 */
 	@Override
 	public void setTarget(L2Object newTarget)
 	{
-		
 		if (newTarget != null)
 		{
-			boolean isParty = (((newTarget instanceof L2PcInstance) && isInParty() && getParty().getMembers().contains(newTarget)));
-			
-			// Check if the new target is visible
-			if (!isParty && !newTarget.isVisible())
-			{
-				newTarget = null;
-			}
+			boolean isInParty = (newTarget.isPlayer() && isInParty() && getParty().containsPlayer(newTarget.getActingPlayer()));
 			
 			// Prevents /target exploiting
-			if ((newTarget != null) && !isParty && (Math.abs(newTarget.getZ() - getZ()) > 1000))
+			if (!isInParty && (Math.abs(newTarget.getZ() - getZ()) > 1000))
 			{
 				newTarget = null;
 			}
-		}
-		if (!isGM())
-		{
-			// Can't target and attack festival monsters if not participant
-			if ((newTarget instanceof L2FestivalMonsterInstance) && !isFestivalParticipant())
+			
+			// Check if the new target is visible
+			if ((newTarget != null) && !isInParty && !newTarget.isVisible())
 			{
 				newTarget = null;
 			}
-			else if (newTarget instanceof L2Vehicle)
+			
+			// vehicles cant be targeted
+			if (!isGM() && (newTarget instanceof L2Vehicle))
 			{
 				newTarget = null;
 			}
-			else if (isInParty() && getParty().isInDimensionalRift())
-			{
-				byte riftType = getParty().getDimensionalRift().getType();
-				byte riftRoom = getParty().getDimensionalRift().getCurrentRoom();
-				
-				if ((newTarget != null) && !DimensionalRiftManager.getInstance().getRoom(riftType, riftRoom).checkIfInZone(newTarget.getX(), newTarget.getY(), newTarget.getZ()))
-				{
-					newTarget = null;
-				}
-			}
 		}
 		
 		// Get the current target
@@ -5250,25 +5240,47 @@ public final class L2PcInstance extends L2Playable
 		
 		if (oldTarget != null)
 		{
-			if (oldTarget.equals(newTarget))
+			if (oldTarget.equals(newTarget)) // no target change?
 			{
-				return; // no target change
+				// Validate location of the target.
+				if ((newTarget != null) && (newTarget.getObjectId() != getObjectId()))
+				{
+					sendPacket(new ValidateLocation(newTarget));
+				}
+				return;
 			}
 			
-			// Remove the L2PcInstance from the _statusListener of the old target if it was a L2Character
-			if (oldTarget instanceof L2Character)
-			{
-				((L2Character) oldTarget).removeStatusListener(this);
-			}
+			// Remove the target from the status listener.
+			oldTarget.removeStatusListener(this);
 		}
 		
-		// Add the L2PcInstance to the _statusListener of the new target if it's a L2Character
 		if (newTarget instanceof L2Character)
 		{
-			((L2Character) newTarget).addStatusListener(this);
-			TargetSelected my = new TargetSelected(getObjectId(), newTarget.getObjectId(), getX(), getY(), getZ());
-			broadcastPacket(my);
+			final L2Character target = (L2Character) newTarget;
+			
+			// Validate location of the new target.
+			if (newTarget.getObjectId() != getObjectId())
+			{
+				sendPacket(new ValidateLocation(target));
+			}
+			
+			// Show the client his new target.
+			sendPacket(new MyTargetSelected(this, target));
+			
+			// Register target to listen for hp changes.
+			target.addStatusListener(this);
+			
+			// Send max/current hp.
+			final StatusUpdate su = new StatusUpdate(target);
+			su.addAttribute(StatusUpdate.MAX_HP, target.getMaxHp());
+			su.addAttribute(StatusUpdate.CUR_HP, (int) target.getCurrentHp());
+			sendPacket(su);
+			
+			// To others the new target, and not yourself!
+			Broadcast.toKnownPlayers(this, new TargetSelected(getObjectId(), newTarget.getObjectId(), getX(), getY(), getZ()));
 		}
+		
+		// Target was removed?
 		if ((newTarget == null) && (getTarget() != null))
 		{
 			broadcastPacket(new TargetUnselected(this));

+ 0 - 32
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java

@@ -35,11 +35,8 @@ import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.SocialAction;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
@@ -126,35 +123,6 @@ public class L2SepulcherNpcInstance extends L2Npc
 			
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Check if the player is attackable (without a forced attack)
-			if (isAutoAttackable(player))
-			{
-				// Send a Server->Client packet MyTargetSelected to the
-				// L2PcInstance player
-				// The player.getLevel() - getLevel() permit to display the
-				// correct color in the select window
-				MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-				player.sendPacket(my);
-				
-				// Send a Server->Client packet StatusUpdate of the
-				// L2NpcInstance to the L2PcInstance to update its HP bar
-				StatusUpdate su = new StatusUpdate(this);
-				su.addAttribute(StatusUpdate.CUR_HP, (int) getStatus().getCurrentHp());
-				su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-				player.sendPacket(su);
-			}
-			else
-			{
-				// Send a Server->Client packet MyTargetSelected to the
-				// L2PcInstance player
-				MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
-				player.sendPacket(my);
-			}
-			
-			// Send a Server->Client packet ValidateLocation to correct the
-			// L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

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

@@ -34,10 +34,7 @@ import com.l2jserver.gameserver.model.entity.Siegable;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 
 public class L2SiegeFlagInstance extends L2Npc
 {
@@ -169,19 +166,6 @@ public class L2SiegeFlagInstance extends L2Npc
 		{
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
-			StatusUpdate su = new StatusUpdate(this);
-			su.addAttribute(StatusUpdate.CUR_HP, (int) getStatus().getCurrentHp());
-			su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-			player.sendPacket(su);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

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

@@ -37,11 +37,8 @@ import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
 import com.l2jserver.gameserver.network.serverpackets.SocialAction;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StopMove;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.util.Rnd;
 
@@ -576,19 +573,6 @@ public final class L2TamedBeastInstance extends L2FeedableBeastInstance
 		{
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
-			StatusUpdate su = new StatusUpdate(this);
-			su.addAttribute(StatusUpdate.CUR_HP, (int) getStatus().getCurrentHp());
-			su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-			player.sendPacket(su);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

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

@@ -26,10 +26,7 @@ import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
 
 public final class L2TerritoryWardInstance extends L2Attackable
 {
@@ -176,19 +173,6 @@ public final class L2TerritoryWardInstance extends L2Attackable
 		{
 			// Set the target of the L2PcInstance player
 			player.setTarget(this);
-			
-			// Send a Server->Client packet MyTargetSelected to the L2PcInstance player
-			MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel());
-			player.sendPacket(my);
-			
-			// Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
-			StatusUpdate su = new StatusUpdate(this);
-			su.addAttribute(StatusUpdate.CUR_HP, (int) getStatus().getCurrentHp());
-			su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
-			player.sendPacket(su);
-			
-			// Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
-			player.sendPacket(new ValidateLocation(this));
 		}
 		else if (interact)
 		{

+ 4 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/CharStatus.java

@@ -264,6 +264,7 @@ public class CharStatus
 	public void setCurrentHp(double newHp, boolean broadcastPacket)
 	{
 		// Get the Max HP of the L2Character
+		int currentHp = (int) getCurrentHp();
 		final double maxHp = getActiveChar().getStat().getMaxHp();
 		
 		synchronized (this)
@@ -297,7 +298,7 @@ public class CharStatus
 		}
 		
 		// Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
-		if (broadcastPacket)
+		if ((currentHp != _currentHp) && broadcastPacket)
 		{
 			getActiveChar().broadcastStatusUpdate();
 		}
@@ -322,6 +323,7 @@ public class CharStatus
 	public final void setCurrentMp(double newMp, boolean broadcastPacket)
 	{
 		// Get the Max MP of the L2Character
+		int currentMp = (int) getCurrentMp();
 		final int maxMp = getActiveChar().getStat().getMaxMp();
 		
 		synchronized (this)
@@ -355,7 +357,7 @@ public class CharStatus
 		}
 		
 		// Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
-		if (broadcastPacket)
+		if ((currentMp != _currentMp) && broadcastPacket)
 		{
 			getActiveChar().broadcastStatusUpdate();
 		}

+ 2 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/PcStatus.java

@@ -349,6 +349,7 @@ public class PcStatus extends PlayableStatus
 	public final void setCurrentCp(double newCp, boolean broadcastPacket)
 	{
 		// Get the Max CP of the L2Character
+		int currentCp = (int) getCurrentCp();
 		int maxCp = getActiveChar().getStat().getMaxCp();
 		
 		synchronized (this)
@@ -387,7 +388,7 @@ public class PcStatus extends PlayableStatus
 		}
 		
 		// Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
-		if (broadcastPacket)
+		if ((currentCp != _currentCp) && broadcastPacket)
 		{
 			getActiveChar().broadcastStatusUpdate();
 		}

+ 11 - 17
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/MyTargetSelected.java

@@ -18,18 +18,12 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2ControllableAirShipInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
 /**
- * <pre>
- * color 	-xx -> -9 	red<p>
- * 			-8  -> -6	light-red<p>
- * 			-5	-> -3	yellow<p>
- * 			-2	-> 2    white<p>
- * 			 3	-> 5	green<p>
- * 			 6	-> 8	light-blue<p>
- * 			 9	-> xx	blue<p>
- * </pre>
- * 
- * usually the color equals the level difference to the selected target
+ * @author Unknown, UnAfraid
  */
 public class MyTargetSelected extends L2GameServerPacket
 {
@@ -37,19 +31,19 @@ public class MyTargetSelected extends L2GameServerPacket
 	private final int _color;
 	
 	/**
-	 * @param objectId of the target
-	 * @param color the level difference to the target, name color is calculated from that.
+	 * @param player
+	 * @param target
 	 */
-	public MyTargetSelected(int objectId, int color)
+	public MyTargetSelected(L2PcInstance player, L2Character target)
 	{
-		_objectId = objectId;
-		_color = color;
+		_objectId = (target instanceof L2ControllableAirShipInstance) ? ((L2ControllableAirShipInstance) target).getHelmObjectId() : target.getObjectId();
+		_color = target.isAutoAttackable(player) ? (player.getLevel() - target.getLevel()) : 0;
 	}
 	
 	@Override
 	protected final void writeImpl()
 	{
-		writeC(0xb9);
+		writeC(0xB9);
 		writeD(_objectId);
 		writeH(_color);
 		writeD(0x00);

+ 8 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/ValidateLocation.java

@@ -18,20 +18,18 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
-import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.Location;
 
 public class ValidateLocation extends L2GameServerPacket
 {
 	private final int _charObjId;
-	private final int _x, _y, _z, _heading;
+	private final Location _loc;
 	
-	public ValidateLocation(L2Character cha)
+	public ValidateLocation(L2Object obj)
 	{
-		_charObjId = cha.getObjectId();
-		_x = cha.getX();
-		_y = cha.getY();
-		_z = cha.getZ();
-		_heading = cha.getHeading();
+		_charObjId = obj.getObjectId();
+		_loc = new Location(obj);
 	}
 	
 	@Override
@@ -40,9 +38,7 @@ public class ValidateLocation extends L2GameServerPacket
 		writeC(0x79);
 		
 		writeD(_charObjId);
-		writeD(_x);
-		writeD(_y);
-		writeD(_z);
-		writeD(_heading);
+		writeLoc(_loc);
+		writeD(_loc.getHeading());
 	}
 }