Browse Source

BETA: Added basic support for "for_npc" on items, also fixed Boats & AirShips Restrictions.

Reported by: lion
MELERIX 12 năm trước cách đây
mục cha
commit
4e63850232

+ 7 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/L2Item.java

@@ -218,6 +218,7 @@ public abstract class L2Item
 	private final boolean _questItem;
 	private final boolean _freightable;
 	private final boolean _is_oly_restricted;
+	private final boolean _for_npc;
 	private final boolean _common;
 	private final boolean _heroItem;
 	private final boolean _pvpItem;
@@ -275,6 +276,7 @@ public abstract class L2Item
 		_questItem = set.getBool("is_questitem", false);
 		_freightable = set.getBool("is_freightable", false);
 		_is_oly_restricted = set.getBool("is_oly_restricted", false);
+		_for_npc = set.getBool("for_npc", false);
 		
 		// _immediate_effect - herb
 		_ex_immediate_effect = set.getBool("ex_immediate_effect", false);
@@ -1080,6 +1082,11 @@ public abstract class L2Item
 		return _is_oly_restricted || Config.LIST_OLY_RESTRICTED_ITEMS.contains(_itemId);
 	}
 	
+	public boolean isForNpc()
+	{
+		return _for_npc;
+	}
+	
 	/**
 	 * Returns the name of the item
 	 * @return String

+ 7 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/SystemMessageId.java

@@ -14011,6 +14011,12 @@ public final class SystemMessageId
 	 */
 	public static final SystemMessageId YOU_CANNOT_BOARD_NOT_MEET_REQUEIREMENTS;
 	
+	/**
+	 * ID: 2728<br>
+	 * Message: This action is prohibited while mounted or on an airship.
+	 */
+	public static final SystemMessageId ACTION_PROHIBITED_WHILE_MOUNTED_OR_ON_AN_AIRSHIP;
+	
 	/**
 	 * ID: 2729<br>
 	 * Message: You cannot control the helm while transformed.
@@ -17311,6 +17317,7 @@ public final class SystemMessageId
 		BOARD_OR_CANCEL_NOT_POSSIBLE_HERE = new SystemMessageId(2721);
 		ANOTHER_AIRSHIP_ALREADY_SUMMONED = new SystemMessageId(2722);
 		YOU_CANNOT_BOARD_NOT_MEET_REQUEIREMENTS = new SystemMessageId(2727);
+		ACTION_PROHIBITED_WHILE_MOUNTED_OR_ON_AN_AIRSHIP = new SystemMessageId(2728);
 		YOU_CANNOT_CONTROL_THE_HELM_WHILE_TRANSFORMED = new SystemMessageId(2729);
 		YOU_CANNOT_CONTROL_THE_HELM_WHILE_YOU_ARE_PETRIFIED = new SystemMessageId(2730);
 		YOU_CANNOT_CONTROL_THE_HELM_WHEN_YOU_ARE_DEAD = new SystemMessageId(2731);

+ 9 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/Attack.java

@@ -22,6 +22,7 @@ import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 /**
@@ -61,6 +62,14 @@ public final class Attack extends L2GameClientPacket
 			return;
 		}
 		
+		// Avoid Attacks in Boat.
+		if (activeChar.isPlayable() && activeChar.isInBoat())
+		{
+			activeChar.sendPacket(SystemMessageId.NOT_ALLOWED_ON_BOAT);
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
+		
 		// avoid using expensive operations if not needed
 		final L2Object target;
 		if (activeChar.getTargetId() == _objectId)

+ 9 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestMagicSkillUse.java

@@ -28,6 +28,7 @@ import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 
 public final class RequestMagicSkillUse extends L2GameClientPacket
@@ -80,6 +81,14 @@ public final class RequestMagicSkillUse extends L2GameClientPacket
 		// Check the validity of the skill
 		if (skill != null)
 		{
+			// Avoid Use of Skills in AirShip.
+			if (activeChar.isPlayable() && activeChar.isInAirShip())
+			{
+				activeChar.sendPacket(SystemMessageId.ACTION_PROHIBITED_WHILE_MOUNTED_OR_ON_AN_AIRSHIP);
+				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+				return;
+			}
+			
 			if ((activeChar.isTransformed() || activeChar.isInStance()) && !activeChar.containsAllowedTransformSkill(skill.getId()))
 			{
 				activeChar.sendPacket(ActionFailed.STATIC_PACKET);

+ 6 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java

@@ -63,6 +63,12 @@ public final class RequestPetUseItem extends L2GameClientPacket
 			return;
 		}
 		
+		if (!item.getItem().isForNpc())
+		{
+			activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
+			return;
+		}
+		
 		if (activeChar.isAlikeDead() || pet.isDead())
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);