Prevent tapping into System.currentTimeMillis with each Timestamp call.
This commit is contained in:
@@ -93,7 +93,16 @@ public class Timestamp
|
||||
*/
|
||||
public long getRemaining()
|
||||
{
|
||||
return Math.max(_stamp - System.currentTimeMillis(), 0);
|
||||
if (_stamp == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
final long remainingTime = Math.max(_stamp - System.currentTimeMillis(), 0);
|
||||
if (remainingTime == 0)
|
||||
{
|
||||
_stamp = 0;
|
||||
}
|
||||
return remainingTime;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,6 +111,15 @@ public class Timestamp
|
||||
*/
|
||||
public boolean hasNotPassed()
|
||||
{
|
||||
return System.currentTimeMillis() < _stamp;
|
||||
if (_stamp == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
final boolean hasNotPassed = System.currentTimeMillis() < _stamp;
|
||||
if (!hasNotPassed)
|
||||
{
|
||||
_stamp = 0;
|
||||
}
|
||||
return hasNotPassed;
|
||||
}
|
||||
}
|
||||
|
@@ -9693,9 +9693,9 @@ public class PlayerInstance extends Playable
|
||||
final Effect[] effects = getAllEffects();
|
||||
statement = con.prepareStatement(ADD_SKILL_SAVE);
|
||||
|
||||
final List<Integer> storedSkills = new ArrayList<>();
|
||||
|
||||
int buff_index = 0;
|
||||
final List<Integer> storedSkills = new ArrayList<>();
|
||||
final long currentTime = System.currentTimeMillis();
|
||||
|
||||
for (Effect effect : effects)
|
||||
{
|
||||
@@ -9717,8 +9717,8 @@ public class PlayerInstance extends Playable
|
||||
if (_reuseTimestamps.containsKey(effect.getSkill().getId()))
|
||||
{
|
||||
final Timestamp t = _reuseTimestamps.get(effect.getSkill().getId());
|
||||
statement.setLong(6, t.hasNotPassed() ? t.getReuse() : 0);
|
||||
statement.setLong(7, t.hasNotPassed() ? t.getStamp() : 0);
|
||||
statement.setLong(6, currentTime < t.getStamp() ? t.getReuse() : 0);
|
||||
statement.setLong(7, currentTime < t.getStamp() ? t.getStamp() : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -9734,7 +9734,7 @@ public class PlayerInstance extends Playable
|
||||
// Store the reuse delays of remaining skills which lost effect but still under reuse delay. 'restore_type' 1.
|
||||
for (Timestamp t : _reuseTimestamps.values())
|
||||
{
|
||||
if (t.hasNotPassed())
|
||||
if (currentTime < t.getStamp())
|
||||
{
|
||||
final int skillId = t.getSkillId();
|
||||
final int skillLvl = t.getSkillLevel();
|
||||
|
@@ -21,12 +21,18 @@ import java.util.Collection;
|
||||
import org.l2jmobius.gameserver.model.Timestamp;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
|
||||
/**
|
||||
* Skill Cool Time server packet implementation.
|
||||
* @author KenM, Zoey76, Mobius
|
||||
*/
|
||||
public class SkillCoolTime extends GameServerPacket
|
||||
{
|
||||
private final long _currentTime;
|
||||
public Collection<Timestamp> _reuseTimestamps;
|
||||
|
||||
public SkillCoolTime(PlayerInstance player)
|
||||
{
|
||||
_currentTime = System.currentTimeMillis();
|
||||
_reuseTimestamps = player.getReuseTimeStamps();
|
||||
}
|
||||
|
||||
@@ -40,12 +46,12 @@ public class SkillCoolTime extends GameServerPacket
|
||||
}
|
||||
writeC(0xc1);
|
||||
writeD(_reuseTimestamps.size());
|
||||
for (Timestamp reuseTimestamp : _reuseTimestamps)
|
||||
for (Timestamp ts : _reuseTimestamps)
|
||||
{
|
||||
writeD(reuseTimestamp.getSkillId());
|
||||
writeD(reuseTimestamp.getSkillLevel());
|
||||
writeD((int) reuseTimestamp.getReuse() / 1000);
|
||||
writeD((int) reuseTimestamp.getRemaining() / 1000);
|
||||
writeD(ts.getSkillId());
|
||||
writeD(ts.getSkillLevel());
|
||||
writeD((int) ts.getReuse() / 1000);
|
||||
writeD((int) Math.max(ts.getStamp() - _currentTime, 0) / 1000);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user