Disabled skills list now holds Skills instead of Integers.
This commit is contained in:
parent
addd728f80
commit
2f76d3936b
@ -196,7 +196,7 @@ public final class Augmentation
|
||||
if (_skill.isActive() && (Config.ACTIVE_AUGMENTS_START_REUSE_TIME > 0))
|
||||
{
|
||||
player.disableSkill(_skill, Config.ACTIVE_AUGMENTS_START_REUSE_TIME);
|
||||
player.addTimeStamp(_skill, Config.ACTIVE_AUGMENTS_START_REUSE_TIME);
|
||||
player.addTimestamp(_skill, Config.ACTIVE_AUGMENTS_START_REUSE_TIME);
|
||||
}
|
||||
|
||||
player.sendSkillList();
|
||||
|
@ -429,7 +429,6 @@ public abstract class Skill
|
||||
private final int _coolTime;
|
||||
private final int _reuseDelay;
|
||||
private final int _buffDuration;
|
||||
private final int _reuseHashCode;
|
||||
|
||||
/** Target type of the skill : SELF, PARTY, CLAN, PET... */
|
||||
private final SkillTargetType _targetType;
|
||||
@ -669,8 +668,6 @@ public abstract class Skill
|
||||
_singleEffect = set.getBool("singleEffect", false);
|
||||
|
||||
_isDebuff = set.getBool("isDebuff", false);
|
||||
|
||||
_reuseHashCode = SkillTable.getSkillHashCode(_id, _level);
|
||||
}
|
||||
|
||||
public abstract void useSkill(Creature caster, WorldObject[] targets);
|
||||
@ -3214,14 +3211,6 @@ public abstract class Skill
|
||||
return _advancedMultiplier;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the _reuseHashCode
|
||||
*/
|
||||
public int getReuseHashCode()
|
||||
{
|
||||
return _reuseHashCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the _effectTemplates
|
||||
*/
|
||||
|
@ -19,12 +19,12 @@ package org.l2jmobius.gameserver.model.actor;
|
||||
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -1868,9 +1868,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
}
|
||||
|
||||
// Skill reuse check
|
||||
if (reuseDelay > 30000)
|
||||
if ((reuseDelay > 30000) && isPlayer())
|
||||
{
|
||||
addTimeStamp(skill, reuseDelay);
|
||||
getActingPlayer().addTimestamp(skill, reuseDelay);
|
||||
}
|
||||
|
||||
// Check if this skill consume mp on start casting
|
||||
@ -1966,23 +1966,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Index according to skill id the current timestamp of use.<br>
|
||||
* @param skill the s
|
||||
* @param r the r
|
||||
*/
|
||||
public void addTimeStamp(Skill skill, int r)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Index according to skill id the current timestamp of use.<br>
|
||||
* @param _skill the s
|
||||
*/
|
||||
public void removeTimeStamp(Skill _skill)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a force buff on target.<br>
|
||||
* @param target the target
|
||||
@ -3037,15 +3020,18 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
*/
|
||||
class EnableSkill implements Runnable
|
||||
{
|
||||
Skill _skillId;
|
||||
Creature _creature;
|
||||
Skill _skill;
|
||||
|
||||
/**
|
||||
* Instantiates a new enable skill.
|
||||
* @param creature
|
||||
* @param skill the skill
|
||||
*/
|
||||
public EnableSkill(Skill skill)
|
||||
public EnableSkill(Creature creature, Skill skill)
|
||||
{
|
||||
_skillId = skill;
|
||||
_creature = creature;
|
||||
_skill = skill;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -3053,7 +3039,10 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
{
|
||||
try
|
||||
{
|
||||
enableSkill(_skillId);
|
||||
if (_creature != null)
|
||||
{
|
||||
_creature.enableSkill(_skill);
|
||||
}
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
@ -4745,7 +4734,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
public int geoPathGty;
|
||||
}
|
||||
|
||||
protected List<Integer> _disabledSkills;
|
||||
protected List<Skill> _disabledSkills = new CopyOnWriteArrayList<>();
|
||||
private boolean _allSkillsDisabled;
|
||||
protected MoveData _move;
|
||||
private boolean _cursorKeyMovement = false;
|
||||
@ -8262,40 +8251,15 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
* <BR>
|
||||
* All skills disabled are identified by their skillId in <B>_disabledSkills</B> of the Creature <BR>
|
||||
* <BR>
|
||||
* @param _skill
|
||||
* @param skill
|
||||
*/
|
||||
public void enableSkill(Skill _skill)
|
||||
public void enableSkill(Skill skill)
|
||||
{
|
||||
if (_disabledSkills == null)
|
||||
_disabledSkills.remove(skill);
|
||||
if (isPlayer())
|
||||
{
|
||||
return;
|
||||
getActingPlayer().removeTimestamp(skill);
|
||||
}
|
||||
|
||||
_disabledSkills.remove(_skill.getReuseHashCode());
|
||||
|
||||
if (this instanceof PlayerInstance)
|
||||
{
|
||||
removeTimeStamp(_skill);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable a skill (add it to _disabledSkills of the Creature).<BR>
|
||||
* <BR>
|
||||
* <B><U> Concept</U> :</B><BR>
|
||||
* <BR>
|
||||
* All skills disabled are identified by their skillId in <B>_disabledSkills</B> of the Creature <BR>
|
||||
* <BR>
|
||||
* @param skill The identifier of the Skill to disable
|
||||
*/
|
||||
public void disableSkill(Skill skill)
|
||||
{
|
||||
if (_disabledSkills == null)
|
||||
{
|
||||
_disabledSkills = Collections.synchronizedList(new ArrayList<Integer>());
|
||||
}
|
||||
|
||||
_disabledSkills.add(skill.getReuseHashCode());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -8310,11 +8274,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
return;
|
||||
}
|
||||
|
||||
disableSkill(skill);
|
||||
if (!_disabledSkills.contains(skill))
|
||||
{
|
||||
_disabledSkills.add(skill);
|
||||
}
|
||||
|
||||
if (delay > 10)
|
||||
{
|
||||
ThreadPool.schedule(new EnableSkill(skill), delay);
|
||||
ThreadPool.schedule(new EnableSkill(this, skill), delay);
|
||||
}
|
||||
}
|
||||
|
||||
@ -8325,21 +8292,19 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
* <BR>
|
||||
* All skills disabled are identified by their skillId in <B>_disabledSkills</B> of the Creature <BR>
|
||||
* <BR>
|
||||
* @param _skill the skill to know if its disabled
|
||||
* @param skill the skill to know if its disabled
|
||||
* @return true, if is skill disabled
|
||||
*/
|
||||
public boolean isSkillDisabled(Skill _skill)
|
||||
public boolean isSkillDisabled(Skill skill)
|
||||
{
|
||||
final Skill skill = _skill;
|
||||
|
||||
if (isAllSkillsDisabled() && !skill.isPotion())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this instanceof PlayerInstance)
|
||||
if (isPlayer())
|
||||
{
|
||||
final PlayerInstance activeChar = (PlayerInstance) this;
|
||||
final PlayerInstance activeChar = getActingPlayer();
|
||||
|
||||
if (((skill.getSkillType() == SkillType.FISHING) || (skill.getSkillType() == SkillType.REELING) || (skill.getSkillType() == SkillType.PUMPING)) && !activeChar.isFishing() && ((activeChar.getActiveWeaponItem() != null) && (activeChar.getActiveWeaponItem().getItemType() != WeaponType.ROD)))
|
||||
{
|
||||
@ -8392,19 +8357,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
return true;
|
||||
}
|
||||
|
||||
if (activeChar.isHero() && HeroSkillTable.isHeroSkill(_skill.getId()) && activeChar.isInOlympiadMode() && activeChar.isOlympiadStart())
|
||||
if (activeChar.isHero() && HeroSkillTable.isHeroSkill(skill.getId()) && activeChar.isInOlympiadMode() && activeChar.isOlympiadStart())
|
||||
{
|
||||
activeChar.sendMessage("You can't use Hero skills during Olympiad match.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (_disabledSkills == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return _disabledSkills.contains(_skill.getReuseHashCode());
|
||||
return _disabledSkills.contains(skill);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -151,6 +151,7 @@ import org.l2jmobius.gameserver.model.entity.siege.Siege;
|
||||
import org.l2jmobius.gameserver.model.entity.siege.clanhalls.DevastatedCastle;
|
||||
import org.l2jmobius.gameserver.model.extender.BaseExtender.EventType;
|
||||
import org.l2jmobius.gameserver.model.holders.PlayerStatsHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.TimestampHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
@ -535,7 +536,7 @@ public final class PlayerInstance extends Playable
|
||||
private final List<Integer> _selectedBlocksList = new ArrayList<>(); // Related to CB.
|
||||
private int _mailPosition;
|
||||
private FishData _fish;
|
||||
private final Map<Integer, TimeStamp> ReuseTimeStamps = new ConcurrentHashMap<>();
|
||||
private final Map<Integer, TimestampHolder> _reuseTimestamps = new ConcurrentHashMap<>();
|
||||
boolean _gmStatus = true; // true by default since this is used by GMS
|
||||
public WorldObject _saymode = null;
|
||||
String Dropzor = "Coin of Luck";
|
||||
@ -9925,9 +9926,9 @@ public final class PlayerInstance extends Playable
|
||||
statement.setInt(3, effect.getSkill().getLevel());
|
||||
statement.setInt(4, effect.getCount());
|
||||
statement.setInt(5, effect.getTime());
|
||||
if (ReuseTimeStamps.containsKey(effect.getSkill().getReuseHashCode()))
|
||||
if (_reuseTimestamps.containsKey(effect.getSkill().getId()))
|
||||
{
|
||||
final TimeStamp t = ReuseTimeStamps.get(effect.getSkill().getReuseHashCode());
|
||||
final TimestampHolder t = _reuseTimestamps.get(effect.getSkill().getId());
|
||||
statement.setLong(6, t.hasNotPassed() ? t.getReuse() : 0);
|
||||
statement.setLong(7, t.hasNotPassed() ? t.getStamp() : 0);
|
||||
}
|
||||
@ -9943,12 +9944,12 @@ public final 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())
|
||||
for (TimestampHolder t : _reuseTimestamps.values())
|
||||
{
|
||||
if (t.hasNotPassed())
|
||||
{
|
||||
final int skillId = t.getSkill().getId();
|
||||
final int skillLvl = t.getSkill().getLevel();
|
||||
final int skillId = t.getSkillId();
|
||||
final int skillLvl = t.getSkillLevel();
|
||||
if (storedSkills.contains(skillId))
|
||||
{
|
||||
continue;
|
||||
@ -10399,7 +10400,7 @@ public final class PlayerInstance extends Playable
|
||||
}
|
||||
|
||||
disableSkill(skill, remainingTime);
|
||||
addTimeStamp(new TimeStamp(skill, reuseDelay, systime));
|
||||
addTimestamp(new TimestampHolder(skill, reuseDelay, systime));
|
||||
}
|
||||
}
|
||||
rset.close();
|
||||
@ -10429,7 +10430,7 @@ public final class PlayerInstance extends Playable
|
||||
}
|
||||
|
||||
disableSkill(skill, remainingTime);
|
||||
addTimeStamp(new TimeStamp(skill, reuseDelay, systime));
|
||||
addTimestamp(new TimestampHolder(skill, reuseDelay, systime));
|
||||
}
|
||||
}
|
||||
rset.close();
|
||||
@ -16461,100 +16462,49 @@ public final class PlayerInstance extends Playable
|
||||
sendPacket(new EtcStatusUpdate(this));
|
||||
}
|
||||
|
||||
public static class TimeStamp
|
||||
{
|
||||
|
||||
public long getStamp()
|
||||
{
|
||||
return stamp;
|
||||
}
|
||||
|
||||
public Skill getSkill()
|
||||
{
|
||||
return skill;
|
||||
}
|
||||
|
||||
public long getReuse()
|
||||
{
|
||||
return reuse;
|
||||
}
|
||||
|
||||
public long getRemaining()
|
||||
{
|
||||
return Math.max(stamp - System.currentTimeMillis(), 0);
|
||||
}
|
||||
|
||||
protected boolean hasNotPassed()
|
||||
{
|
||||
return System.currentTimeMillis() < stamp;
|
||||
}
|
||||
|
||||
private final Skill skill;
|
||||
private final long reuse;
|
||||
private final long stamp;
|
||||
|
||||
protected TimeStamp(Skill _skill, long _reuse)
|
||||
{
|
||||
skill = _skill;
|
||||
reuse = _reuse;
|
||||
stamp = System.currentTimeMillis() + reuse;
|
||||
}
|
||||
|
||||
protected TimeStamp(Skill _skill, long _reuse, long _systime)
|
||||
{
|
||||
skill = _skill;
|
||||
reuse = _reuse;
|
||||
stamp = _systime;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Index according to skill id the current timestamp of use.
|
||||
* @param s the s
|
||||
* @param r the r
|
||||
*/
|
||||
@Override
|
||||
public void addTimeStamp(Skill s, int r)
|
||||
public void addTimestamp(Skill s, int r)
|
||||
{
|
||||
ReuseTimeStamps.put(s.getReuseHashCode(), new TimeStamp(s, r));
|
||||
_reuseTimestamps.put(s.getId(), new TimestampHolder(s, r));
|
||||
}
|
||||
|
||||
/**
|
||||
* Index according to skill this TimeStamp instance for restoration purposes only.
|
||||
* @param T the t
|
||||
* @param t the t
|
||||
*/
|
||||
private void addTimeStamp(TimeStamp T)
|
||||
private void addTimestamp(TimestampHolder t)
|
||||
{
|
||||
ReuseTimeStamps.put(T.getSkill().getReuseHashCode(), T);
|
||||
_reuseTimestamps.put(t.getSkillId(), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Index according to skill id the current timestamp of use.
|
||||
* @param s the s
|
||||
* @param skill the skill
|
||||
*/
|
||||
@Override
|
||||
public void removeTimeStamp(Skill s)
|
||||
public void removeTimestamp(Skill skill)
|
||||
{
|
||||
ReuseTimeStamps.remove(s.getReuseHashCode());
|
||||
_reuseTimestamps.remove(skill.getId());
|
||||
}
|
||||
|
||||
public Collection<TimeStamp> getReuseTimeStamps()
|
||||
public Collection<TimestampHolder> getReuseTimeStamps()
|
||||
{
|
||||
return ReuseTimeStamps.values();
|
||||
return _reuseTimestamps.values();
|
||||
}
|
||||
|
||||
public void resetSkillTime(boolean ssl)
|
||||
public void resetSkillTime(boolean sendSkillList)
|
||||
{
|
||||
final Skill arr$[] = getAllSkills();
|
||||
for (Skill skill : arr$)
|
||||
for (Skill skill : getAllSkills())
|
||||
{
|
||||
if ((skill != null) && skill.isActive() && (skill.getId() != 1324))
|
||||
{
|
||||
enableSkill(skill);
|
||||
}
|
||||
}
|
||||
|
||||
if (ssl)
|
||||
if (sendSkillList)
|
||||
{
|
||||
sendSkillList();
|
||||
}
|
||||
|
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.holders;
|
||||
|
||||
import org.l2jmobius.gameserver.model.Skill;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class TimestampHolder
|
||||
{
|
||||
private final Skill _skill;
|
||||
private final long _reuse;
|
||||
private final long _stamp;
|
||||
|
||||
public TimestampHolder(Skill skill, long reuse)
|
||||
{
|
||||
_skill = skill;
|
||||
_reuse = reuse;
|
||||
_stamp = System.currentTimeMillis() + _reuse;
|
||||
}
|
||||
|
||||
public TimestampHolder(Skill skill, long reuse, long stamp)
|
||||
{
|
||||
_skill = skill;
|
||||
_reuse = reuse;
|
||||
_stamp = stamp;
|
||||
}
|
||||
|
||||
public long getStamp()
|
||||
{
|
||||
return _stamp;
|
||||
}
|
||||
|
||||
public Skill getSkill()
|
||||
{
|
||||
return _skill;
|
||||
}
|
||||
|
||||
public int getSkillId()
|
||||
{
|
||||
return _skill.getId();
|
||||
}
|
||||
|
||||
public int getSkillLevel()
|
||||
{
|
||||
return _skill.getLevel();
|
||||
}
|
||||
|
||||
public long getReuse()
|
||||
{
|
||||
return _reuse;
|
||||
}
|
||||
|
||||
public long getRemaining()
|
||||
{
|
||||
return Math.max(_stamp - System.currentTimeMillis(), 0);
|
||||
}
|
||||
|
||||
public boolean hasNotPassed()
|
||||
{
|
||||
return System.currentTimeMillis() < _stamp;
|
||||
}
|
||||
}
|
@ -17,21 +17,19 @@
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.holders.TimestampHolder;
|
||||
|
||||
public class SkillCoolTime extends GameServerPacket
|
||||
{
|
||||
@SuppressWarnings("rawtypes")
|
||||
public Collection _reuseTimeStamps;
|
||||
public Collection<TimestampHolder> _reuseTimestamps;
|
||||
|
||||
public SkillCoolTime(PlayerInstance player)
|
||||
{
|
||||
_reuseTimeStamps = player.getReuseTimeStamps();
|
||||
_reuseTimestamps = player.getReuseTimeStamps();
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
protected final void writeImpl()
|
||||
{
|
||||
@ -40,15 +38,14 @@ public class SkillCoolTime extends GameServerPacket
|
||||
{
|
||||
return;
|
||||
}
|
||||
writeC(193);
|
||||
writeD(_reuseTimeStamps.size());
|
||||
PlayerInstance.TimeStamp ts;
|
||||
for (Iterator i$ = _reuseTimeStamps.iterator(); i$.hasNext(); writeD((int) ts.getRemaining() / 1000))
|
||||
writeC(0xc1);
|
||||
writeD(_reuseTimestamps.size());
|
||||
for (TimestampHolder reuseTimestamp : _reuseTimestamps)
|
||||
{
|
||||
ts = (PlayerInstance.TimeStamp) i$.next();
|
||||
writeD(ts.getSkill().getId());
|
||||
writeD(0);
|
||||
writeD((int) ts.getReuse() / 1000);
|
||||
writeD(reuseTimestamp.getSkillId());
|
||||
writeD(reuseTimestamp.getSkillLevel());
|
||||
writeD((int) reuseTimestamp.getReuse() / 1000);
|
||||
writeD((int) reuseTimestamp.getRemaining() / 1000);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user