Prevent tapping into System.currentTimeMillis with each Timestamp call.

This commit is contained in:
MobiusDevelopment
2019-11-04 17:01:20 +00:00
parent cd918658d1
commit 01f16fdd82
71 changed files with 1583 additions and 2048 deletions

View File

@@ -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;
}
}

View File

@@ -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();

View File

@@ -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);
}
}
}