Bläddra i källkod

Partially fixing time unit issue preventing player to switch weapons
while attacking

Reported by: Weddy

Zoey76 10 år sedan
förälder
incheckning
435e2066f7

+ 7 - 11
L2J_Server/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java

@@ -18,6 +18,7 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 
 import com.l2jserver.Config;
@@ -59,8 +60,8 @@ public final class UseItem extends L2GameClientPacket
 	/** Weapon Equip Task */
 	private static class WeaponEquipTask implements Runnable
 	{
-		L2ItemInstance item;
-		L2PcInstance activeChar;
+		private final L2ItemInstance item;
+		private final L2PcInstance activeChar;
 		
 		protected WeaponEquipTask(L2ItemInstance it, L2PcInstance character)
 		{
@@ -71,12 +72,6 @@ public final class UseItem extends L2GameClientPacket
 		@Override
 		public void run()
 		{
-			// If character is still engaged in strike we should not change weapon
-			if (activeChar.isAttackingNow())
-			{
-				return;
-			}
-			
 			// Equip or unEquip
 			activeChar.useEquippableItem(item, false);
 		}
@@ -139,8 +134,10 @@ public final class UseItem extends L2GameClientPacket
 			return;
 		}
 		
+		_itemId = item.getId();
+		
 		// Char cannot use item when dead
-		if (activeChar.isDead() || !activeChar.getInventory().canManipulateWithItemId(item.getId()))
+		if (activeChar.isDead() || !activeChar.getInventory().canManipulateWithItemId(_itemId))
 		{
 			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
 			sm.addItemName(item);
@@ -153,7 +150,6 @@ public final class UseItem extends L2GameClientPacket
 			return;
 		}
 		
-		_itemId = item.getId();
 		if (activeChar.isFishing() && ((_itemId < 6535) || (_itemId > 6540)))
 		{
 			// You cannot do anything else while fishing
@@ -321,7 +317,7 @@ public final class UseItem extends L2GameClientPacket
 			}
 			else if (activeChar.isAttackingNow())
 			{
-				ThreadPoolManager.getInstance().scheduleGeneral(new WeaponEquipTask(item, activeChar), activeChar.getAttackEndTime() - System.currentTimeMillis());
+				ThreadPoolManager.getInstance().scheduleGeneral(new WeaponEquipTask(item, activeChar), TimeUnit.MILLISECONDS.convert(activeChar.getAttackEndTime() - System.nanoTime(), TimeUnit.NANOSECONDS));
 			}
 			else
 			{