Browse Source

BETA: Implementing the rest of isTargetable thanks VlLight
Also a little bit cleanup.

Rumen Nikiforov 13 years ago
parent
commit
7aab64320c

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

@@ -782,4 +782,12 @@ public abstract class L2Object
 	{
 		return false;
 	}
+	
+	/**
+	 * @return {@code true} if object Can be targetable
+	 */
+	public boolean isTargetable()
+	{
+		return false;
+	}
 }

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

@@ -1553,6 +1553,7 @@ public class L2Npc extends L2Character
 		return _staticAIData.showName();
 	}
 	
+	@Override
 	public boolean isTargetable()
 	{
 		return _staticAIData.isTargetable();

+ 20 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/Action.java

@@ -17,6 +17,7 @@ package com.l2jserver.gameserver.network.clientpackets;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
@@ -64,7 +65,7 @@ public final class Action extends L2GameClientPacket
 		if (activeChar.inObserverMode())
 		{
 			activeChar.sendPacket(SystemMessageId.OBSERVERS_CANNOT_PARTICIPATE);
-			sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
 		
@@ -86,21 +87,27 @@ public final class Action extends L2GameClientPacket
 		if (obj == null)
 		{
 			// pressing e.g. pickup many times quickly would get you here
-			sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
+		
+		if (!obj.isTargetable() && !activeChar.isGM())
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
 		
 		// Players can't interact with objects in the other instances, except from multiverse
 		if ((obj.getInstanceId() != activeChar.getInstanceId()) && (activeChar.getInstanceId() != -1))
 		{
-			sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
 		
 		// Only GMs can directly interact with invisible characters
 		if (obj.isPlayer() && obj.getActingPlayer().getAppearance().getInvisible() && !activeChar.isGM())
 		{
-			sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 		}
 		
@@ -108,15 +115,19 @@ public final class Action extends L2GameClientPacket
 		if (activeChar.getActiveRequester() != null)
 		{
 			// Actions prohibited when in trade
-			sendPacket(ActionFailed.STATIC_PACKET);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
 		}
 		
 		switch (_actionId)
 		{
 			case 0:
+			{
 				obj.onAction(activeChar);
 				break;
+			}
 			case 1:
+			{
 				if (!activeChar.isGM() && !obj.isNpc() && Config.ALT_GAME_VIEWNPC)
 				{
 					obj.onAction(activeChar, false);
@@ -126,11 +137,14 @@ public final class Action extends L2GameClientPacket
 					obj.onActionShift(activeChar);
 				}
 				break;
+			}
 			default:
+			{
 				// Invalid action detected (probably client cheating), log this
 				_log.warning(getType() + ": Character: " + activeChar.getName() + " requested invalid action: " + _actionId);
-				sendPacket(ActionFailed.STATIC_PACKET);
+				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 				break;
+			}
 		}
 	}
 	

+ 29 - 13
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/Attack.java

@@ -50,28 +50,48 @@ public final class Attack extends L2GameClientPacket
 	@Override
 	protected void runImpl()
 	{
-		final L2PcInstance activeChar = getClient().getActiveChar();
-		if (activeChar == null) return;
+		final L2PcInstance activeChar = getActiveChar();
+		if (activeChar == null)
+		{
+			return;
+		}
+		
 		// avoid using expensive operations if not needed
 		final L2Object target;
 		if (activeChar.getTargetId() == _objectId)
+		{
 			target = activeChar.getTarget();
+		}
 		else
+		{
 			target = L2World.getInstance().findObject(_objectId);
+		}
+		
 		if (target == null)
+		{
 			return;
+		}
+		
+		if (!target.isTargetable() && !activeChar.isGM())
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
 		
 		// Players can't attack objects in the other instances
 		// except from multiverse
-		if (target.getInstanceId() != activeChar.getInstanceId()
-				&& activeChar.getInstanceId() != -1)
+		else if (target.getInstanceId() != activeChar.getInstanceId() && activeChar.getInstanceId() != -1)
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
+		}
 		
 		// Only GMs can directly attack invisible characters
-		if (target instanceof L2PcInstance
-				&& ((L2PcInstance)target).getAppearance().getInvisible()
-				&& !activeChar.isGM())
+		else if (target.isPlayer() && target.getActingPlayer().getAppearance().getInvisible() && !activeChar.isGM())
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
+		}
 		
 		if (activeChar.getTarget() != target)
 		{
@@ -79,17 +99,13 @@ public final class Attack extends L2GameClientPacket
 		}
 		else
 		{
-			if ((target.getObjectId() != activeChar.getObjectId())
-					&& activeChar.getPrivateStoreType() ==0
-					&& activeChar.getActiveRequester() ==null)
+			if ((target.getObjectId() != activeChar.getObjectId()) && activeChar.getPrivateStoreType() == 0 && activeChar.getActiveRequester() == null)
 			{
-				//_log.debug("Starting ForcedAttack");
 				target.onForcedAttack(activeChar);
-				//_log.debug("Ending ForcedAttack");
 			}
 			else
 			{
-				sendPacket(ActionFailed.STATIC_PACKET);
+				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			}
 		}
 	}

+ 35 - 19
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/AttackRequest.java

@@ -21,7 +21,6 @@ import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
  * This class ...
- *
  * @version $Revision: 1.7.2.1.2.2 $ $Date: 2005/03/27 15:29:30 $
  */
 public final class AttackRequest extends L2GameClientPacket
@@ -42,38 +41,59 @@ public final class AttackRequest extends L2GameClientPacket
 	@Override
 	protected void readImpl()
 	{
-		_objectId  = readD();
-		_originX  = readD();
-		_originY  = readD();
-		_originZ  = readD();
-		_attackId  = readC(); 	 // 0 for simple click   1 for shift-click
+		_objectId = readD();
+		_originX = readD();
+		_originY = readD();
+		_originZ = readD();
+		_attackId = readC(); // 0 for simple click 1 for shift-click
 	}
 	
 	@Override
 	protected void runImpl()
 	{
-		final L2PcInstance activeChar = getClient().getActiveChar();
-		if (activeChar == null) return;
+		final L2PcInstance activeChar = getActiveChar();
+		if (activeChar == null)
+		{
+			return;
+		}
+		
 		// avoid using expensive operations if not needed
 		final L2Object target;
 		if (activeChar.getTargetId() == _objectId)
+		{
 			target = activeChar.getTarget();
+		}
 		else
+		{
 			target = L2World.getInstance().findObject(_objectId);
+		}
+		
 		if (target == null)
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
+		}
+		
+		else if (!target.isTargetable() && !activeChar.isGM())
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
 		
 		// Players can't attack objects in the other instances
 		// except from multiverse
-		if (target.getInstanceId() != activeChar.getInstanceId()
-				&& activeChar.getInstanceId() != -1)
+		else if (target.getInstanceId() != activeChar.getInstanceId() && activeChar.getInstanceId() != -1)
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
+		}
 		
 		// Only GMs can directly attack invisible characters
-		if (target instanceof L2PcInstance
-				&& ((L2PcInstance)target).getAppearance().getInvisible()
-				&& !activeChar.isGM())
+		else if (target.isPlayer() && target.getActingPlayer().getAppearance().getInvisible() && !activeChar.isGM())
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			return;
+		}
 		
 		if (activeChar.getTarget() != target)
 		{
@@ -81,17 +101,13 @@ public final class AttackRequest extends L2GameClientPacket
 		}
 		else
 		{
-			if ((target.getObjectId() != activeChar.getObjectId())
-					&& activeChar.getPrivateStoreType() ==0
-					&& activeChar.getActiveRequester() ==null)
+			if ((target.getObjectId() != activeChar.getObjectId()) && activeChar.getPrivateStoreType() == 0 && activeChar.getActiveRequester() == null)
 			{
-				//_log.debug("Starting ForcedAttack");
 				target.onForcedAttack(activeChar);
-				//_log.debug("Ending ForcedAttack");
 			}
 			else
 			{
-				sendPacket(ActionFailed.STATIC_PACKET);
+				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 			}
 		}
 	}