瀏覽代碼

BETA: Item reuse fixes:
* Fixed NPE at `L2Character`.
* Fixed item reuse time on system messages.

Patch by: d!g0
Reviewed by: Sdw, Zoey76

Zoey76 11 年之前
父節點
當前提交
be9a72cc30

+ 7 - 17
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -2180,11 +2180,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 */
 	public synchronized final long getItemRemainingReuseTime(int itemObjId)
 	{
-		if ((_reuseTimeStampsItems == null) || !_reuseTimeStampsItems.containsKey(itemObjId))
-		{
-			return -1;
-		}
-		return _reuseTimeStampsItems.get(itemObjId).getRemaining();
+		final TimeStamp reuseStamp = (_reuseTimeStampsItems != null) ? _reuseTimeStampsItems.get(itemObjId) : null;
+		return reuseStamp != null ? reuseStamp.getRemaining() : -1;
 	}
 	
 	/**
@@ -2194,7 +2191,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 */
 	public final long getReuseDelayOnGroup(int group)
 	{
-		if (group > 0)
+		if ((group > 0) && (_reuseTimeStampsItems != null))
 		{
 			for (TimeStamp ts : _reuseTimeStampsItems.values())
 			{
@@ -2278,11 +2275,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 */
 	public synchronized final long getSkillRemainingReuseTime(int hashCode)
 	{
-		if ((_reuseTimeStampsSkills == null) || !_reuseTimeStampsSkills.containsKey(hashCode))
-		{
-			return -1;
-		}
-		return _reuseTimeStampsSkills.get(hashCode).getRemaining();
+		final TimeStamp reuseStamp = (_reuseTimeStampsSkills != null) ? _reuseTimeStampsSkills.get(hashCode) : null;
+		return reuseStamp != null ? reuseStamp.getRemaining() : -1;
 	}
 	
 	/**
@@ -2292,11 +2286,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 */
 	public synchronized final boolean hasSkillReuse(int hashCode)
 	{
-		if ((_reuseTimeStampsSkills == null) || !_reuseTimeStampsSkills.containsKey(hashCode))
-		{
-			return false;
-		}
-		return _reuseTimeStampsSkills.get(hashCode).hasNotPassed();
+		final TimeStamp reuseStamp = (_reuseTimeStampsSkills != null) ? _reuseTimeStampsSkills.get(hashCode) : null;
+		return (reuseStamp != null) && reuseStamp.hasNotPassed();
 	}
 	
 	/**
@@ -2328,7 +2319,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		{
 			return;
 		}
-		
 		_disabledSkills.remove(skill.getReuseHashCode());
 	}
 	

+ 4 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java

@@ -188,7 +188,7 @@ public final class UseItem extends L2GameClientPacket
 			final long reuse = activeChar.getItemRemainingReuseTime(item.getObjectId());
 			if (reuse > 0)
 			{
-				reuseData(activeChar, item);
+				reuseData(activeChar, item, reuseDelay);
 				sendSharedGroupUpdate(activeChar, sharedReuseGroup, reuse, reuseDelay);
 				return;
 			}
@@ -196,7 +196,7 @@ public final class UseItem extends L2GameClientPacket
 			final long reuseOnGroup = activeChar.getReuseDelayOnGroup(sharedReuseGroup);
 			if (reuseOnGroup > 0)
 			{
-				reuseData(activeChar, item);
+				reuseData(activeChar, item, reuseOnGroup);
 				sendSharedGroupUpdate(activeChar, sharedReuseGroup, reuseOnGroup, reuseDelay);
 				return;
 			}
@@ -377,13 +377,12 @@ public final class UseItem extends L2GameClientPacket
 		}
 	}
 	
-	private void reuseData(L2PcInstance activeChar, L2ItemInstance item)
+	private void reuseData(L2PcInstance activeChar, L2ItemInstance item, long remainingTime)
 	{
-		SystemMessage sm = null;
-		final long remainingTime = activeChar.getItemRemainingReuseTime(item.getObjectId());
 		final int hours = (int) (remainingTime / 3600000L);
 		final int minutes = (int) (remainingTime % 3600000L) / 60000;
 		final int seconds = (int) ((remainingTime / 1000) % 60);
+		final SystemMessage sm;
 		if (hours > 0)
 		{
 			sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);