浏览代码

Retail like spawn protection, thanks BiggBoss.

_DS_ 15 年之前
父节点
当前提交
8d0ce07ff9
共有 20 个文件被更改,包括 117 次插入55 次删除
  1. 16 0
      L2_GameServer/java/com/l2jserver/Config.java
  2. 0 13
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/Action.java
  3. 1 7
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/AttackRequest.java
  4. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
  5. 12 13
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/L2GameClientPacket.java
  6. 0 6
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/MoveBackwardToLocation.java
  7. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java
  8. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestAutoSoulShot.java
  9. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java
  10. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestItemList.java
  11. 1 7
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestMagicSkillUse.java
  12. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreBuy.java
  13. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreManageBuy.java
  14. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreManageSell.java
  15. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreQuitBuy.java
  16. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreQuitSell.java
  17. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreSell.java
  18. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/Say2.java
  19. 13 6
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
  20. 7 2
      L2_GameServer/java/config/Character.properties

+ 16 - 0
L2_GameServer/java/com/l2jserver/Config.java

@@ -179,6 +179,7 @@ public final class Config
 	public static int UNSTUCK_INTERVAL;
 	public static int TELEPORT_WATCHDOG_TIMEOUT;
 	public static int PLAYER_SPAWN_PROTECTION;
+	public static ArrayList<Integer> SPAWN_PROTECTION_ALLOWED_ITEMS;
 	public static boolean RANDOM_RESPAWN_IN_TOWN_ENABLED;
 	public static boolean OFFSET_ON_TELEPORT_ENABLED;
 	public static int MAX_OFFSET_ON_TELEPORT;
@@ -1497,6 +1498,21 @@ public final class Config
 					UNSTUCK_INTERVAL = Integer.parseInt(Character.getProperty("UnstuckInterval", "300"));
 					TELEPORT_WATCHDOG_TIMEOUT = Integer.parseInt(Character.getProperty("TeleportWatchdogTimeout", "0"));
 					PLAYER_SPAWN_PROTECTION = Integer.parseInt(Character.getProperty("PlayerSpawnProtection", "0"));
+					String[] items = Character.getProperty("PlayerSpawnProtectionAllowedItems", "0").split(",");
+					SPAWN_PROTECTION_ALLOWED_ITEMS = new ArrayList<Integer>(items.length);
+					for(String item : items)
+					{
+						Integer itm = 0;
+						try { itm = Integer.parseInt(item); }
+						catch(NumberFormatException nfe)
+						{
+							_log.warning("Player Spawn Protection: Wrong ItemId passed: "+item);
+							_log.warning(nfe.getMessage());
+						}
+						if(itm != 0)
+							SPAWN_PROTECTION_ALLOWED_ITEMS.add(itm);
+					}
+					SPAWN_PROTECTION_ALLOWED_ITEMS.trimToSize();
 					RANDOM_RESPAWN_IN_TOWN_ENABLED = Boolean.parseBoolean(Character.getProperty("RandomRespawnInTownEnabled", "True"));
 					OFFSET_ON_TELEPORT_ENABLED = Boolean.parseBoolean(Character.getProperty("OffsetOnTeleportEnabled", "True"));
 					MAX_OFFSET_ON_TELEPORT = Integer.parseInt(Character.getProperty("MaxOffsetOnTeleport", "50"));

+ 0 - 13
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/Action.java

@@ -45,10 +45,6 @@ public final class Action extends L2GameClientPacket
 	private int _originZ;
 	private int _actionId;
 
-	// player can select object as a target but can't interact,
-	// or spawn protection will be removed
-	private boolean _removeSpawnProtection = false;
-
 	@Override
 	protected void readImpl()
 	{
@@ -83,10 +79,7 @@ public final class Action extends L2GameClientPacket
 		final L2Object obj;
 
 		if (activeChar.getTargetId() == _objectId)
-		{
 			obj = activeChar.getTarget();
-			_removeSpawnProtection = true;
-		}
 		else if (activeChar.isInAirShip()
 				&& activeChar.getAirShip().getHelmObjectId() == _objectId)
 			obj = activeChar.getAirShip();
@@ -146,12 +139,6 @@ public final class Action extends L2GameClientPacket
 			getClient().sendPacket(ActionFailed.STATIC_PACKET);
 	}
 
-	@Override
-	protected boolean triggersOnActionRequest()
-	{
-		return _removeSpawnProtection;
-	}
-
 	/* (non-Javadoc)
 	 * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType()
 	 */

+ 1 - 7
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/AttackRequest.java

@@ -103,11 +103,5 @@ public final class AttackRequest extends L2GameClientPacket
 	public String getType()
 	{
 		return _C__0A_ATTACKREQUEST;
-	}
-	
-	@Override
-	protected boolean triggersOnActionRequest()
-	{
-		return true;
-	}
+	}	
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java

@@ -644,4 +644,10 @@ public class EnterWorld extends L2GameClientPacket
 
 		activeChar.setPledgeClass(pledgeClass);
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 12 - 13
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/L2GameClientPacket.java

@@ -23,6 +23,7 @@ import org.mmocore.network.ReceivablePacket;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
@@ -92,20 +93,17 @@ public abstract class L2GameClientPacket extends ReceivablePacket<L2GameClient>
 			runImpl();
 			
 			/* Removes onspawn protection - player has faster computer than average
-			 * 
-			 * True for these packets:
-			 * AttackRequest
-			 * MoveBackwardToLocation
-			 * RequestActionUse
-			 * RequestMagicSkillUse
-			 * 
-			 * it could include pickup and talk too, but less is better
+			 * Since GE: True for all packets
+			 * except RequestItemList and UseItem (in case the item is a Scroll of Escape (736) 
 			 */
-			if (triggersOnActionRequest() && getClient().getActiveChar() != null)
-				getClient().getActiveChar().onActionRequest();
-			
-			cleanUp();
+			L2PcInstance actor = getClient().getActiveChar();
+			if(actor != null && actor.isSpawnProtected())
+			{
+				if (triggersOnActionRequest())
+					getClient().getActiveChar().onActionRequest();
+			}
 			
+			cleanUp();	
 		}
 		catch (Throwable t)
 		{
@@ -130,10 +128,11 @@ public abstract class L2GameClientPacket extends ReceivablePacket<L2GameClient>
 	
 	/**
 	 * Overriden with true value on some packets that should disable spawn protection
+	 * (RequestItemList and UseItem only)
 	 */
 	protected boolean triggersOnActionRequest()
 	{
-		return false;
+		return true;
 	}
 	
 	protected void cleanUp()

+ 0 - 6
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/MoveBackwardToLocation.java

@@ -137,10 +137,4 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 	{
 		return _C__01_MOVEBACKWARDTOLOC;
 	}
-	
-	@Override
-	protected boolean triggersOnActionRequest()
-	{
-		return true;
-	}
 }

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java

@@ -764,6 +764,6 @@ public final class RequestActionUse extends L2GameClientPacket
 	@Override
 	protected boolean triggersOnActionRequest()
 	{
-		return true;
+		return _actionId != 10 && _actionId != 28;
 	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestAutoSoulShot.java

@@ -149,4 +149,10 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 	{
 		return _C__CF_REQUESTAUTOSOULSHOT;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java

@@ -222,4 +222,10 @@ public final class RequestDropItem extends L2GameClientPacket
 	{
 		return _C__12_REQUESTDROPITEM;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestItemList.java

@@ -49,4 +49,10 @@ public final class RequestItemList extends L2GameClientPacket
 	{
 		return _C__0F_REQUESTITEMLIST;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 1 - 7
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestMagicSkillUse.java

@@ -104,11 +104,5 @@ public final class RequestMagicSkillUse extends L2GameClientPacket
 	public String getType()
 	{
 		return _C__2F_REQUESTMAGICSKILLUSE;
-	}
-	
-	@Override
-	protected boolean triggersOnActionRequest()
-	{
-		return true;
-	}
+	}	
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreBuy.java

@@ -191,4 +191,10 @@ public final class RequestPrivateStoreBuy extends L2GameClientPacket
 	{
 		FastSet.recycle(_items);
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreManageBuy.java

@@ -50,4 +50,10 @@ public final class RequestPrivateStoreManageBuy extends L2GameClientPacket
 	{
 		return _C__90_REQUESTPRIVATESTOREMANAGEBUY;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreManageSell.java

@@ -70,4 +70,10 @@ public final class RequestPrivateStoreManageSell extends L2GameClientPacket
 	{
 		return _C__73_REQUESTPRIVATESTOREMANAGESELL;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreQuitBuy.java

@@ -53,4 +53,10 @@ public class RequestPrivateStoreQuitBuy extends L2GameClientPacket
 	{
 		return _C__93_REQUESTPRIVATESTOREQUITBUY;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreQuitSell.java

@@ -53,4 +53,10 @@ public final class RequestPrivateStoreQuitSell extends L2GameClientPacket
 	{
 		return _C__76_REQUESTPRIVATESTOREQUITSELL;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPrivateStoreSell.java

@@ -136,4 +136,10 @@ public final class RequestPrivateStoreSell extends L2GameClientPacket
 	{
 		return _C__96_REQUESTPRIVATESTORESELL;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/Say2.java

@@ -262,4 +262,10 @@ public final class Say2 extends L2GameClientPacket
 	{
 		return _C__38_SAY2;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 13 - 6
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java

@@ -49,6 +49,7 @@ public final class UseItem extends L2GameClientPacket
 	private static final String _C__14_USEITEM = "[C] 14 UseItem";
 
 	private int _objectId;
+	private int _itemId;
 
 	/** Weapon Equip Task */
 	public class WeaponEquipTask implements Runnable
@@ -117,7 +118,7 @@ public final class UseItem extends L2GameClientPacket
                 sm = null;
                 return;
             }
-			int itemId = item.getItemId();
+			_itemId = item.getItemId();
 			/*
 			 * Alt game - Karma punishment // SOE
 			 * 736  	Scroll of Escape
@@ -161,7 +162,7 @@ public final class UseItem extends L2GameClientPacket
 			 */
 			if (!Config.ALT_GAME_KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
 			{
-				switch (itemId)
+				switch (_itemId)
 				{
 					case 736: case 1538: case 1829: case 1830: case 3958: case 5858:
 					case 5859: case 6663: case 6664: case 7554: case 7555: case 7556:
@@ -170,15 +171,15 @@ public final class UseItem extends L2GameClientPacket
 						return;
 				}
 				
-				if (itemId >= 7117 && itemId <= 7135)
+				if (_itemId >= 7117 && _itemId <= 7135)
 					return;
 			}
 
 			// Items that cannot be used
-			if (itemId == 57)
+			if (_itemId == 57)
                 return;
             
-            if (activeChar.isFishing() && (itemId < 6535 || itemId > 6540))
+            if (activeChar.isFishing() && (_itemId < 6535 || _itemId > 6540))
             {
                 // You cannot do anything else while fishing
                 SystemMessage sm = new SystemMessage(SystemMessageId.CANNOT_DO_WHILE_FISHING_3);
@@ -333,7 +334,7 @@ public final class UseItem extends L2GameClientPacket
                     }
                 }
                 
-                if (activeChar.isCursedWeaponEquipped() && itemId == 6408) // Don't allow to put formal wear
+                if (activeChar.isCursedWeaponEquipped() && _itemId == 6408) // Don't allow to put formal wear
                     return;
 
                 if (activeChar.isAttackingNow())
@@ -387,4 +388,10 @@ public final class UseItem extends L2GameClientPacket
 	{
 		return _C__14_USEITEM;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return !Config.SPAWN_PROTECTION_ALLOWED_ITEMS.contains(_itemId);
+	}
 }

+ 7 - 2
L2_GameServer/java/config/Character.properties

@@ -576,8 +576,13 @@ TeleportWatchdogTimeout = 0
 
 # After a player teleports, this is the time the player is protected.
 # This time is in seconds, leave it at 0 if you want this feature disabled.
-# Default: 0
-PlayerSpawnProtection = 0
+# Retail (Since GE): 600 (10 minutes)
+# Default: 600
+PlayerSpawnProtection = 600
+# Spawn protection should dissapear with any action with the exception
+# of the item usage from items in this list.
+# Format: itemId,itemId,itemId,....
+PlayerSpawnProtectionAllowedItems = 736,1538,1829,1830
 
 # If enabled, players respawn in town on different locations defined in zone.xml for given town.
 # If disabled the first spawn location from zone.xml is used.