Prechádzať zdrojové kódy

Gnat: Spawn protection, Fix: #4766

JIV 15 rokov pred
rodič
commit
66e3fc6669

+ 6 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -690,7 +690,8 @@ public final class L2PcInstance extends L2Playable
 	private long _protectEndTime = 0;
 	private long _protectEndTime = 0;
 	public boolean isSpawnProtected() { return  _protectEndTime > GameTimeController.getGameTicks(); }
 	public boolean isSpawnProtected() { return  _protectEndTime > GameTimeController.getGameTicks(); }
 	private long _teleportProtectEndTime = 0;
 	private long _teleportProtectEndTime = 0;
-
+	public boolean isTeleportProtected() { return  _teleportProtectEndTime > GameTimeController.getGameTicks(); }
+	
 	// protects a char from agro mobs when getting up from fake death
 	// protects a char from agro mobs when getting up from fake death
 	private long _recentFakeDeathEndTime = 0;
 	private long _recentFakeDeathEndTime = 0;
 	private boolean _isFakeDeath;
 	private boolean _isFakeDeath;
@@ -11153,9 +11154,12 @@ public final class L2PcInstance extends L2Playable
 
 
 	public void onActionRequest()
 	public void onActionRequest()
 	{
 	{
+		if (isSpawnProtected())
+			sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NO_LONGER_PROTECTED_FROM_AGGRESSIVE_MONSTERS));
+		if (isTeleportProtected())
+			sendMessage("Teleport spawn protection ended.");
 		setProtection(false);
 		setProtection(false);
 		setTeleportProtection(false);
 		setTeleportProtection(false);
-		sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NO_LONGER_PROTECTED_FROM_AGGRESSIVE_MONSTERS));
 	}
 	}
 
 
 	/**
 	/**

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

@@ -55,4 +55,10 @@ public final class Appearing extends L2GameClientPacket
 	{
 	{
 		return _C__30_APPEARING;
 		return _C__30_APPEARING;
 	}
 	}
+
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }
 }

+ 4 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/L2GameClientPacket.java

@@ -100,7 +100,11 @@ public abstract class L2GameClientPacket extends ReceivablePacket<L2GameClient>
 			if(actor != null && (actor.isSpawnProtected() || actor.isInvul()))
 			if(actor != null && (actor.isSpawnProtected() || actor.isInvul()))
 			{
 			{
 				if (triggersOnActionRequest())
 				if (triggersOnActionRequest())
+				{
 					actor.onActionRequest();
 					actor.onActionRequest();
+					if (Config.DEBUG)
+						_log.info("Spawn protection for player " + actor.getName() + " removed by packet: " + getType());
+				}
 			}
 			}
 			
 			
 			cleanUp();	
 			cleanUp();