/* * Copyright (C) 2004-2013 L2J Server * * This file is part of L2J Server. * * L2J Server is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * L2J Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.l2jserver.gameserver.model; import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; import com.l2jserver.gameserver.model.skills.L2Skill; /** * Simple class containing all necessary information to maintain
* valid time stamps and reuse for skills and items reuse upon re-login.
* Filter this carefully as it becomes redundant to store reuse for small delays. * @author Yesod, Zoey76 */ public class TimeStamp { private final int _id1; // Item or Skill Id. private final int _id2; // Item Object Id or Skill Level. private final long _reuse; private final long _stamp; private final int _group; /** * @param skill the skill upon the stamp will be created. * @param reuse the reuse time for this skill. */ public TimeStamp(L2Skill skill, long reuse) { _id1 = skill.getId(); _id2 = skill.getLevel(); _reuse = reuse; _stamp = System.currentTimeMillis() + reuse; _group = -1; } /** * @param skill the skill upon the stamp will be created. * @param reuse the reuse time for this skill. * @param systime overrides the system time with a customized one. */ public TimeStamp(L2Skill skill, long reuse, long systime) { _id1 = skill.getId(); _id2 = skill.getLevel(); _reuse = reuse; _stamp = systime; _group = -1; } /** * @param item the item upon the stamp will be created. * @param reuse the reuse time for this item. */ public TimeStamp(L2ItemInstance item, long reuse) { _id1 = item.getId(); _id2 = item.getObjectId(); _reuse = reuse; _stamp = System.currentTimeMillis() + reuse; _group = item.getSharedReuseGroup(); } /** * @param item the item upon the stamp will be created. * @param reuse the reuse time for this item. * @param systime overrides the system time with a customized one. */ public TimeStamp(L2ItemInstance item, long reuse, long systime) { _id1 = item.getId(); _id2 = item.getObjectId(); _reuse = reuse; _stamp = systime; _group = item.getSharedReuseGroup(); } /** * @return the time stamp, either the system time where this time stamp was created or the custom time assigned. */ public long getStamp() { return _stamp; } /** * @return the first Id for the item, the item Id. */ public int getItemId() { return _id1; } /** * @return the second Id for the item, the item object Id. */ public int getItemObjectId() { return _id2; } /** * @return the skill Id. */ public int getSkillId() { return _id1; } /** * @return the skill level. */ public int getSkillLvl() { return _id2; } /** * @return the reuse set for this Item/Skill. */ public long getReuse() { return _reuse; } /** * @return the shared reuse group for the item, -1 for skills. */ public int getSharedReuseGroup() { return _group; } /** * @return the remaining time for this time stamp to expire. */ public long getRemaining() { return Math.max(_stamp - System.currentTimeMillis(), 0); } /** * Check if the reuse delay has passed and if it has not then update the stored reuse time according to what is currently remaining on the delay. * @return {@code true} if this time stamp has expired, {@code false} otherwise. */ public boolean hasNotPassed() { return System.currentTimeMillis() < _stamp; } }