Browse Source

BETA: Implementing is_oly_restricted item

Rumen Nikiforov 13 years ago
parent
commit
74b6f8ffc4

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

@@ -758,7 +758,7 @@ public final class L2ItemInstance extends L2Object
 	
 	public boolean isOlyRestrictedItem()
 	{
-		return (Config.LIST_OLY_RESTRICTED_ITEMS.contains(_itemId));
+		return getItem().isOlyRestrictedItem();
 	}
 	
 	/**

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

@@ -25,6 +25,7 @@ import com.l2jserver.gameserver.model.actor.knownlist.ObjectKnownList;
 import com.l2jserver.gameserver.model.actor.poly.ObjectPoly;
 import com.l2jserver.gameserver.model.actor.position.ObjectPosition;
 import com.l2jserver.gameserver.model.entity.Instance;
+import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExSendUIEvent;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
@@ -688,4 +689,9 @@ public abstract class L2Object
 	{
 		// default implementation
 	}
+	
+	public void sendPacket(SystemMessageId id)
+	{
+		// default implementation
+	}
 }

+ 14 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Summon.java

@@ -930,4 +930,18 @@ public abstract class L2Summon extends L2Playable
 	{
 		return getTemplate().isUndead();
 	}
+	
+	@Override
+	public void sendPacket(L2GameServerPacket mov)
+	{
+		if (getOwner() != null)
+			getOwner().sendPacket(mov);
+	}
+	
+	@Override
+	public void sendPacket(SystemMessageId id)
+	{
+		if (getOwner() != null)
+			getOwner().sendPacket(id);
+	}
 }

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

@@ -4656,6 +4656,7 @@ public final class L2PcInstance extends L2Playable
 	 * Send SystemMessage packet.<BR><BR>
 	 * @param id SystemMessageId
 	 */
+	@Override
 	public void sendPacket(SystemMessageId id)
 	{
 		sendPacket(SystemMessage.getSystemMessage(id));
@@ -13606,8 +13607,7 @@ public final class L2PcInstance extends L2Playable
 		for (int i = 0; i < Inventory.PAPERDOLL_TOTALSLOTS; i++)
 		{
 			L2ItemInstance equippedItem = getInventory().getPaperdollItem(i);
-			if (equippedItem != null && (!equippedItem.getItem().checkCondition(this, this, false)
-					|| (isInOlympiadMode() && equippedItem.isOlyRestrictedItem())))
+			if (equippedItem != null && !equippedItem.getItem().checkCondition(this, this, false))
 			{
 				getInventory().unEquipItemInSlot(i);
 				
@@ -13618,7 +13618,7 @@ public final class L2PcInstance extends L2Playable
 				SystemMessage sm = null;
 				if (equippedItem.getItem().getBodyPart() == L2Item.SLOT_BACK)
 				{
-					sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLOAK_REMOVED_BECAUSE_ARMOR_SET_REMOVED));
+					sendPacket(SystemMessageId.CLOAK_REMOVED_BECAUSE_ARMOR_SET_REMOVED);
 					return;
 				}
 				

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

@@ -172,14 +172,7 @@ public final class UseItem extends L2GameClientPacket
 			_log.log(Level.INFO, activeChar.getObjectId() + ": use item " + _objectId);
 		
 		if (item.isEquipable())
-		{
-			// Don't allow hero equipment and restricted items during Olympiad
-			if (activeChar.isInOlympiadMode() && (item.isHeroItem() || item.isOlyRestrictedItem()))
-			{
-				activeChar.sendPacket(SystemMessageId.THIS_ITEM_CANT_BE_EQUIPPED_FOR_THE_OLYMPIAD_EVENT);
-				return;
-			}
-			
+		{	
 			// Don't allow to put formal wear while a cursed weapon is equipped.
 			if (activeChar.isCursedWeaponEquipped() && _itemId == 6408)
 			{

+ 21 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/templates/item/L2Item.java

@@ -28,6 +28,7 @@ import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Summon;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -177,6 +178,7 @@ public abstract class L2Item
 	private final boolean _depositable;
 	private final boolean _questItem;
 	private final boolean _freightable;
+	private final boolean _is_oly_restricted;
 	private final boolean _common;
 	private final boolean _heroItem;
 	private final boolean _pvpItem;
@@ -225,6 +227,7 @@ public abstract class L2Item
 		_depositable = set.getBool("is_depositable", true);
 		_questItem = set.getBool("is_questitem", false);
 		_freightable = set.getBool("is_freightable", false);
+		_is_oly_restricted = set.getBool("is_oly_restricted", false);
 		
 		//_immediate_effect - herb
 		_ex_immediate_effect = set.getInteger("ex_immediate_effect", 0) > 0;
@@ -864,7 +867,17 @@ public abstract class L2Item
 		if (activeChar.isGM() && !Config.GM_ITEM_RESTRICTION)
 			return true;
 		
-		if (_preConditions == null)
+		// Don't allow hero equipment and restricted items during Olympiad
+		if ((isOlyRestrictedItem() || isHeroItem()) && ((activeChar instanceof L2PcInstance) && activeChar.getActingPlayer().isInOlympiadMode()))
+		{
+			if (isEquipable())
+				activeChar.sendPacket(SystemMessageId.THIS_ITEM_CANT_BE_EQUIPPED_FOR_THE_OLYMPIAD_EVENT);
+			else
+				activeChar.sendPacket(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT);
+			return false;
+		}
+		
+		if (!isConditionAttached())
 			return true;
 		
 		Env env = new Env();
@@ -881,7 +894,7 @@ public abstract class L2Item
 			{
 				if (activeChar instanceof L2Summon)
 				{
-					activeChar.getActingPlayer().sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PET_CANNOT_USE_ITEM));
+					activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
 					return false;
 				}
 				
@@ -898,7 +911,7 @@ public abstract class L2Item
 						SystemMessage sm = SystemMessage.getSystemMessage(msgId);
 						if (preCondition.isAddName())
 							sm.addItemName(_itemId);
-						activeChar.getActingPlayer().sendPacket(sm);
+						activeChar.sendPacket(sm);
 					}
 				}
 				return false;
@@ -921,6 +934,11 @@ public abstract class L2Item
 	{
 		return _freightable;
 	}
+	
+	public boolean isOlyRestrictedItem()
+	{
+		return _is_oly_restricted || Config.LIST_OLY_RESTRICTED_ITEMS.contains(_itemId);
+	}
 
 	/**
 	 * Returns the name of the item