Reverting last CharEffectList changes.

This commit is contained in:
MobiusDev
2015-12-10 20:50:21 +00:00
parent 62a97d3de0
commit 692e9700ef
6 changed files with 138 additions and 141 deletions

View File

@@ -240,7 +240,7 @@ public class AdminBuffs implements IAdminCommandHandler
} }
else else
{ {
effects.addAll(target.getEffectList().getPassives().values()); effects.addAll(target.getEffectList().getPassives());
} }
if ((page > ((effects.size() / PAGE_LIMIT) + 1)) || (page < 1)) if ((page > ((effects.size() / PAGE_LIMIT) + 1)) || (page < 1))

View File

@@ -254,7 +254,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
} }
case WHITELIST: case WHITELIST:
{ {
for (BuffInfo info : player.getEffectList().getBuffs().values()) for (BuffInfo info : player.getEffectList().getBuffs())
{ {
if (!inst.getBuffExceptionList().contains(info.getSkill().getId())) if (!inst.getBuffExceptionList().contains(info.getSkill().getId()))
{ {
@@ -264,7 +264,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
for (L2Summon summon : player.getServitors().values()) for (L2Summon summon : player.getServitors().values())
{ {
for (BuffInfo info : summon.getEffectList().getBuffs().values()) for (BuffInfo info : summon.getEffectList().getBuffs())
{ {
if (!inst.getBuffExceptionList().contains(info.getSkill().getId())) if (!inst.getBuffExceptionList().contains(info.getSkill().getId()))
{ {
@@ -276,7 +276,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
final L2Summon pet = player.getPet(); final L2Summon pet = player.getPet();
if (pet != null) if (pet != null)
{ {
for (BuffInfo info : pet.getEffectList().getBuffs().values()) for (BuffInfo info : pet.getEffectList().getBuffs())
{ {
if (!inst.getBuffExceptionList().contains(info.getSkill().getId())) if (!inst.getBuffExceptionList().contains(info.getSkill().getId()))
{ {
@@ -288,7 +288,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
} }
case BLACKLIST: case BLACKLIST:
{ {
for (BuffInfo info : player.getEffectList().getBuffs().values()) for (BuffInfo info : player.getEffectList().getBuffs())
{ {
if (inst.getBuffExceptionList().contains(info.getSkill().getId())) if (inst.getBuffExceptionList().contains(info.getSkill().getId()))
{ {
@@ -298,7 +298,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
for (L2Summon summon : player.getServitors().values()) for (L2Summon summon : player.getServitors().values())
{ {
for (BuffInfo info : summon.getEffectList().getBuffs().values()) for (BuffInfo info : summon.getEffectList().getBuffs())
{ {
if (inst.getBuffExceptionList().contains(info.getSkill().getId())) if (inst.getBuffExceptionList().contains(info.getSkill().getId()))
{ {
@@ -310,7 +310,7 @@ public abstract class AbstractInstance extends AbstractNpcAI
final L2Summon pet = player.getPet(); final L2Summon pet = player.getPet();
if (pet != null) if (pet != null)
{ {
for (BuffInfo info : pet.getEffectList().getBuffs().values()) for (BuffInfo info : pet.getEffectList().getBuffs())
{ {
if (inst.getBuffExceptionList().contains(info.getSkill().getId())) if (inst.getBuffExceptionList().contains(info.getSkill().getId()))
{ {

View File

@@ -23,9 +23,10 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Queue;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -64,18 +65,18 @@ import com.l2jserver.gameserver.network.serverpackets.ShortBuffStatusUpdate;
public final class CharEffectList public final class CharEffectList
{ {
private static final Logger _log = Logger.getLogger(CharEffectList.class.getName()); private static final Logger _log = Logger.getLogger(CharEffectList.class.getName());
/** Map containing all effects from buffs for this effect list. */ /** Queue containing all effects from buffs for this effect list. */
private volatile ConcurrentHashMap<Integer, BuffInfo> _buffs; private volatile Queue<BuffInfo> _buffs;
/** Map containing all triggered skills for this effect list. */ /** Queue containing all triggered skills for this effect list. */
private volatile ConcurrentHashMap<Integer, BuffInfo> _triggered; private volatile Queue<BuffInfo> _triggered;
/** Map containing all dances/songs for this effect list. */ /** Queue containing all dances/songs for this effect list. */
private volatile ConcurrentHashMap<Integer, BuffInfo> _dances; private volatile Queue<BuffInfo> _dances;
/** Map containing all toggle for this effect list. */ /** Queue containing all toggle for this effect list. */
private volatile ConcurrentHashMap<Integer, BuffInfo> _toggles; private volatile Queue<BuffInfo> _toggles;
/** Map containing all debuffs for this effect list. */ /** Queue containing all debuffs for this effect list. */
private volatile ConcurrentHashMap<Integer, BuffInfo> _debuffs; private volatile Queue<BuffInfo> _debuffs;
/** Map containing all passives for this effect list. They bypass most of the actions and they are not included in most operations. */ /** Queue containing all passives for this effect list. They bypass most of the actions and they are not included in most operations. */
private volatile ConcurrentHashMap<Integer, BuffInfo> _passives; private volatile Queue<BuffInfo> _passives;
/** Map containing the all stacked effect in progress for each abnormal type. */ /** Map containing the all stacked effect in progress for each abnormal type. */
private volatile Map<AbnormalType, BuffInfo> _stackedEffects; private volatile Map<AbnormalType, BuffInfo> _stackedEffects;
/** Set containing all abnormal types that shouldn't be added to this creature effect list. */ /** Set containing all abnormal types that shouldn't be added to this creature effect list. */
@@ -112,7 +113,7 @@ public final class CharEffectList
* Gets buff skills. * Gets buff skills.
* @return the buff skills * @return the buff skills
*/ */
public Map<Integer, BuffInfo> getBuffs() public Queue<BuffInfo> getBuffs()
{ {
if (_buffs == null) if (_buffs == null)
{ {
@@ -120,7 +121,7 @@ public final class CharEffectList
{ {
if (_buffs == null) if (_buffs == null)
{ {
_buffs = new ConcurrentHashMap<>(); _buffs = new ConcurrentLinkedQueue<>();
} }
} }
} }
@@ -131,7 +132,7 @@ public final class CharEffectList
* Gets triggered skill skills. * Gets triggered skill skills.
* @return the triggered skill skills * @return the triggered skill skills
*/ */
public Map<Integer, BuffInfo> getTriggered() public Queue<BuffInfo> getTriggered()
{ {
if (_triggered == null) if (_triggered == null)
{ {
@@ -139,7 +140,7 @@ public final class CharEffectList
{ {
if (_triggered == null) if (_triggered == null)
{ {
_triggered = new ConcurrentHashMap<>(); _triggered = new ConcurrentLinkedQueue<>();
} }
} }
} }
@@ -150,7 +151,7 @@ public final class CharEffectList
* Gets dance/song skills. * Gets dance/song skills.
* @return the dance/song skills * @return the dance/song skills
*/ */
public Map<Integer, BuffInfo> getDances() public Queue<BuffInfo> getDances()
{ {
if (_dances == null) if (_dances == null)
{ {
@@ -158,7 +159,7 @@ public final class CharEffectList
{ {
if (_dances == null) if (_dances == null)
{ {
_dances = new ConcurrentHashMap<>(); _dances = new ConcurrentLinkedQueue<>();
} }
} }
} }
@@ -169,7 +170,7 @@ public final class CharEffectList
* Gets toggle skills. * Gets toggle skills.
* @return the toggle skills * @return the toggle skills
*/ */
public Map<Integer, BuffInfo> getToggles() public Queue<BuffInfo> getToggles()
{ {
if (_toggles == null) if (_toggles == null)
{ {
@@ -177,7 +178,7 @@ public final class CharEffectList
{ {
if (_toggles == null) if (_toggles == null)
{ {
_toggles = new ConcurrentHashMap<>(); _toggles = new ConcurrentLinkedQueue<>();
} }
} }
} }
@@ -188,7 +189,7 @@ public final class CharEffectList
* Gets debuff skills. * Gets debuff skills.
* @return the debuff skills * @return the debuff skills
*/ */
public Map<Integer, BuffInfo> getDebuffs() public Queue<BuffInfo> getDebuffs()
{ {
if (_debuffs == null) if (_debuffs == null)
{ {
@@ -196,7 +197,7 @@ public final class CharEffectList
{ {
if (_debuffs == null) if (_debuffs == null)
{ {
_debuffs = new ConcurrentHashMap<>(); _debuffs = new ConcurrentLinkedQueue<>();
} }
} }
} }
@@ -207,7 +208,7 @@ public final class CharEffectList
* Gets passive skills. * Gets passive skills.
* @return the passive skills * @return the passive skills
*/ */
public Map<Integer, BuffInfo> getPassives() public Queue<BuffInfo> getPassives()
{ {
if (_passives == null) if (_passives == null)
{ {
@@ -215,7 +216,7 @@ public final class CharEffectList
{ {
if (_passives == null) if (_passives == null)
{ {
_passives = new ConcurrentHashMap<>(); _passives = new ConcurrentLinkedQueue<>();
} }
} }
} }
@@ -236,27 +237,27 @@ public final class CharEffectList
final List<BuffInfo> buffs = new ArrayList<>(); final List<BuffInfo> buffs = new ArrayList<>();
if (hasBuffs()) if (hasBuffs())
{ {
buffs.addAll(getBuffs().values()); buffs.addAll(getBuffs());
} }
if (hasTriggered()) if (hasTriggered())
{ {
buffs.addAll(getTriggered().values()); buffs.addAll(getTriggered());
} }
if (hasDances()) if (hasDances())
{ {
buffs.addAll(getDances().values()); buffs.addAll(getDances());
} }
if (hasToggles()) if (hasToggles())
{ {
buffs.addAll(getToggles().values()); buffs.addAll(getToggles());
} }
if (hasDebuffs()) if (hasDebuffs())
{ {
buffs.addAll(getDebuffs().values()); buffs.addAll(getDebuffs());
} }
return buffs; return buffs;
} }
@@ -266,14 +267,14 @@ public final class CharEffectList
* @param skill the skill * @param skill the skill
* @return the effect list * @return the effect list
*/ */
private Map<Integer, BuffInfo> getEffectList(Skill skill) private Queue<BuffInfo> getEffectList(Skill skill)
{ {
if (skill == null) if (skill == null)
{ {
return null; return null;
} }
final Map<Integer, BuffInfo> effects; final Queue<BuffInfo> effects;
if (skill.isPassive()) if (skill.isPassive())
{ {
effects = getPassives(); effects = getPassives();
@@ -312,7 +313,7 @@ public final class CharEffectList
{ {
if (hasBuffs()) if (hasBuffs())
{ {
for (BuffInfo info : getBuffs().values()) for (BuffInfo info : getBuffs())
{ {
if (info != null) if (info != null)
{ {
@@ -329,7 +330,7 @@ public final class CharEffectList
if (hasTriggered()) if (hasTriggered())
{ {
for (BuffInfo info : getTriggered().values()) for (BuffInfo info : getTriggered())
{ {
if (info != null) if (info != null)
{ {
@@ -346,7 +347,7 @@ public final class CharEffectList
if (hasDances()) if (hasDances())
{ {
for (BuffInfo info : getDances().values()) for (BuffInfo info : getDances())
{ {
if (info != null) if (info != null)
{ {
@@ -363,7 +364,7 @@ public final class CharEffectList
if (hasToggles()) if (hasToggles())
{ {
for (BuffInfo info : getToggles().values()) for (BuffInfo info : getToggles())
{ {
if (info != null) if (info != null)
{ {
@@ -380,7 +381,7 @@ public final class CharEffectList
if (hasDebuffs()) if (hasDebuffs())
{ {
for (BuffInfo info : getDebuffs().values()) for (BuffInfo info : getDebuffs())
{ {
if (info != null) if (info != null)
{ {
@@ -417,29 +418,34 @@ public final class CharEffectList
public BuffInfo getBuffInfoBySkillId(int skillId) public BuffInfo getBuffInfoBySkillId(int skillId)
{ {
BuffInfo info = null; BuffInfo info = null;
if (hasBuffs() && getBuffs().containsKey(skillId)) if (hasBuffs())
{ {
info = getBuffs().get(skillId); info = getBuffs().stream().filter(b -> b.getSkill().getId() == skillId).findFirst().orElse(null);
} }
else if (hasTriggered() && getTriggered().containsKey(skillId))
if (hasTriggered() && (info == null))
{ {
info = getTriggered().get(skillId); info = getTriggered().stream().filter(b -> b.getSkill().getId() == skillId).findFirst().orElse(null);
} }
else if (hasDances() && getDances().containsKey(skillId))
if (hasDances() && (info == null))
{ {
info = getDances().get(skillId); info = getDances().stream().filter(b -> b.getSkill().getId() == skillId).findFirst().orElse(null);
} }
else if (hasToggles() && getToggles().containsKey(skillId))
if (hasToggles() && (info == null))
{ {
info = getToggles().get(skillId); info = getToggles().stream().filter(b -> b.getSkill().getId() == skillId).findFirst().orElse(null);
} }
else if (hasDebuffs() && getDebuffs().containsKey(skillId))
if (hasDebuffs() && (info == null))
{ {
info = getDebuffs().get(skillId); info = getDebuffs().stream().filter(b -> b.getSkill().getId() == skillId).findFirst().orElse(null);
} }
else if (hasPassives() && getPassives().containsKey(skillId))
if (hasPassives() && (info == null))
{ {
info = getPassives().get(skillId); info = getPassives().stream().filter(b -> b.getSkill().getId() == skillId).findFirst().orElse(null);
} }
return info; return info;
} }
@@ -467,7 +473,7 @@ public final class CharEffectList
{ {
if (_blockedBuffSlots == null) if (_blockedBuffSlots == null)
{ {
_blockedBuffSlots = new CopyOnWriteArraySet<>(); _blockedBuffSlots = ConcurrentHashMap.newKeySet(blockedBuffSlots.size());
} }
} }
} }
@@ -539,13 +545,8 @@ public final class CharEffectList
return false; return false;
} }
final Map<Integer, BuffInfo> effects = getEffectList(skill); final Queue<BuffInfo> effects = getEffectList(skill);
if ((effects == null) || effects.isEmpty()) for (BuffInfo info : effects)
{
return false;
}
for (BuffInfo info : effects.values())
{ {
if ((info != null) && (info.getSkill().getAbnormalType() == type)) if ((info != null) && (info.getSkill().getAbnormalType() == type))
{ {
@@ -608,7 +609,7 @@ public final class CharEffectList
* @param info the buff info * @param info the buff info
* @param effects the effect list * @param effects the effect list
*/ */
protected void stopAndRemove(BuffInfo info, Map<Integer, BuffInfo> effects) protected void stopAndRemove(BuffInfo info, Queue<BuffInfo> effects)
{ {
stopAndRemove(true, info, effects); stopAndRemove(true, info, effects);
} }
@@ -619,7 +620,7 @@ public final class CharEffectList
* @param info the buff info * @param info the buff info
* @param buffs the buff list * @param buffs the buff list
*/ */
private void stopAndRemove(boolean removed, BuffInfo info, Map<Integer, BuffInfo> buffs) private void stopAndRemove(boolean removed, BuffInfo info, Queue<BuffInfo> buffs)
{ {
if (info == null) if (info == null)
{ {
@@ -627,7 +628,7 @@ public final class CharEffectList
} }
// Removes the buff from the given effect list. // Removes the buff from the given effect list.
buffs.remove(info.getSkill().getId()); buffs.remove(info);
// Stop the buff effects. // Stop the buff effects.
info.stopAllEffects(removed); info.stopAllEffects(removed);
// If it's a hidden buff that ends, then decrease hidden buff count. // If it's a hidden buff that ends, then decrease hidden buff count.
@@ -644,7 +645,7 @@ public final class CharEffectList
// If it's an herb that ends, check if there are hidden buffs. // If it's an herb that ends, check if there are hidden buffs.
if (info.getSkill().isAbnormalInstant() && hasBuffs()) if (info.getSkill().isAbnormalInstant() && hasBuffs())
{ {
for (BuffInfo buff : getBuffs().values()) for (BuffInfo buff : getBuffs())
{ {
if ((buff != null) && (buff.getSkill().getAbnormalType() == info.getSkill().getAbnormalType()) && !buff.isInUse()) if ((buff != null) && (buff.getSkill().getAbnormalType() == info.getSkill().getAbnormalType()) && !buff.isInUse())
{ {
@@ -702,31 +703,31 @@ public final class CharEffectList
boolean update = false; boolean update = false;
if (hasBuffs()) if (hasBuffs())
{ {
getBuffs().values().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getBuffs())); getBuffs().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getBuffs()));
update = true; update = true;
} }
if (hasTriggered()) if (hasTriggered())
{ {
getTriggered().values().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getTriggered())); getTriggered().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getTriggered()));
update = true; update = true;
} }
if (hasDebuffs()) if (hasDebuffs())
{ {
getDebuffs().values().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getDebuffs())); getDebuffs().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getDebuffs()));
update = true; update = true;
} }
if (hasDances()) if (hasDances())
{ {
getDances().values().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getDances())); getDances().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getDances()));
update = true; update = true;
} }
if (hasToggles()) if (hasToggles())
{ {
getToggles().values().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getToggles())); getToggles().stream().filter(info -> !info.getSkill().isStayAfterDeath()).forEach(info -> stopAndRemove(info, getToggles()));
update = true; update = true;
} }
@@ -742,31 +743,31 @@ public final class CharEffectList
boolean update = false; boolean update = false;
if (hasBuffs()) if (hasBuffs())
{ {
getBuffs().values().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getBuffs())); getBuffs().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getBuffs()));
update = true; update = true;
} }
if (hasTriggered()) if (hasTriggered())
{ {
getTriggered().values().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getTriggered())); getTriggered().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getTriggered()));
update = true; update = true;
} }
if (hasDebuffs()) if (hasDebuffs())
{ {
getDebuffs().values().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getDebuffs())); getDebuffs().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getDebuffs()));
update = true; update = true;
} }
if (hasDances()) if (hasDances())
{ {
getDances().values().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getDances())); getDances().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getDances()));
update = true; update = true;
} }
if (hasToggles()) if (hasToggles())
{ {
getToggles().values().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getToggles())); getToggles().stream().filter(info -> !info.getSkill().isStayOnSubclassChange()).forEach(info -> stopAndRemove(info, getToggles()));
update = true; update = true;
} }
@@ -783,12 +784,12 @@ public final class CharEffectList
{ {
if (hasBuffs()) if (hasBuffs())
{ {
getBuffs().forEach((k, info) -> stopAndRemove(info, getBuffs())); getBuffs().forEach(b -> stopAndRemove(b, getBuffs()));
} }
if (triggered && hasTriggered()) if (triggered && hasTriggered())
{ {
getTriggered().forEach((k, info) -> stopAndRemove(info, getTriggered())); getTriggered().forEach(b -> stopAndRemove(b, getTriggered()));
} }
// Update effect flags and icons. // Update effect flags and icons.
@@ -812,7 +813,7 @@ public final class CharEffectList
{ {
if (hasToggles()) if (hasToggles())
{ {
getToggles().forEach((k, info) -> stopAndRemove(info, getToggles())); getToggles().forEach(b -> stopAndRemove(b, getToggles()));
// Update effect flags and icons. // Update effect flags and icons.
updateEffectList(update); updateEffectList(update);
} }
@@ -826,7 +827,7 @@ public final class CharEffectList
{ {
if (hasDances()) if (hasDances())
{ {
getDances().forEach((k, info) -> stopAndRemove(info, getDances())); getDances().forEach(b -> stopAndRemove(b, getDances()));
// Update effect flags and icons. // Update effect flags and icons.
updateEffectList(update); updateEffectList(update);
} }
@@ -840,7 +841,7 @@ public final class CharEffectList
{ {
if (hasDebuffs()) if (hasDebuffs())
{ {
getDebuffs().forEach((k, info) -> stopAndRemove(info, getDebuffs())); getDebuffs().forEach(b -> stopAndRemove(b, getDebuffs()));
// Update effect flags and icons. // Update effect flags and icons.
updateEffectList(update); updateEffectList(update);
} }
@@ -864,31 +865,31 @@ public final class CharEffectList
if (hasBuffs()) if (hasBuffs())
{ {
getBuffs().values().stream().filter(Objects::nonNull).forEach(action); getBuffs().stream().filter(Objects::nonNull).forEach(action);
update = true; update = true;
} }
if (hasTriggered()) if (hasTriggered())
{ {
getTriggered().values().stream().filter(Objects::nonNull).forEach(action); getTriggered().stream().filter(Objects::nonNull).forEach(action);
update = true; update = true;
} }
if (hasDances()) if (hasDances())
{ {
getDances().values().stream().filter(Objects::nonNull).forEach(action); getDances().stream().filter(Objects::nonNull).forEach(action);
update = true; update = true;
} }
if (hasToggles()) if (hasToggles())
{ {
getToggles().values().stream().filter(Objects::nonNull).forEach(action); getToggles().stream().filter(Objects::nonNull).forEach(action);
update = true; update = true;
} }
if (hasDebuffs()) if (hasDebuffs())
{ {
getDebuffs().values().stream().filter(Objects::nonNull).forEach(action); getDebuffs().stream().filter(Objects::nonNull).forEach(action);
update = true; update = true;
} }
@@ -912,7 +913,7 @@ public final class CharEffectList
final BuffInfo info = getBuffInfoBySkillId(skillId); final BuffInfo info = getBuffInfoBySkillId(skillId);
if (info != null) if (info != null)
{ {
stopSkillEffects(removed, info.getSkill()); remove(removed, info);
} }
} }
@@ -929,15 +930,9 @@ public final class CharEffectList
*/ */
public void stopSkillEffects(boolean removed, Skill skill) public void stopSkillEffects(boolean removed, Skill skill)
{ {
if ((skill == null) || !isAffectedBySkill(skill.getId())) if (skill != null)
{ {
return; stopSkillEffects(removed, skill.getId());
}
final Map<Integer, BuffInfo> effects = getEffectList(skill);
if (effects != null)
{
remove(removed, effects.get(skill.getId()));
} }
} }
@@ -976,31 +971,31 @@ public final class CharEffectList
boolean update = false; boolean update = false;
if (hasBuffs()) if (hasBuffs())
{ {
getBuffs().values().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getBuffs())); getBuffs().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getBuffs()));
update = true; update = true;
} }
if (hasTriggered()) if (hasTriggered())
{ {
getTriggered().values().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getTriggered())); getTriggered().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getTriggered()));
update = true; update = true;
} }
if (hasDebuffs()) if (hasDebuffs())
{ {
getDebuffs().values().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getDebuffs())); getDebuffs().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getDebuffs()));
update = true; update = true;
} }
if (hasDances()) if (hasDances())
{ {
getDances().values().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getDances())); getDances().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getDances()));
update = true; update = true;
} }
if (hasToggles()) if (hasToggles())
{ {
getToggles().values().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getToggles())); getToggles().stream().filter(info -> info.getSkill().isRemovedOnAnyActionExceptMove()).forEach(info -> stopAndRemove(info, getToggles()));
update = true; update = true;
} }
@@ -1018,25 +1013,25 @@ public final class CharEffectList
{ {
if (hasBuffs()) if (hasBuffs())
{ {
getBuffs().values().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getBuffs())); getBuffs().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getBuffs()));
update = true; update = true;
} }
if (hasTriggered()) if (hasTriggered())
{ {
getTriggered().values().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getTriggered())); getTriggered().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getTriggered()));
update = true; update = true;
} }
if (hasDances()) if (hasDances())
{ {
getDances().values().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getDances())); getDances().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getDances()));
update = true; update = true;
} }
if (hasToggles()) if (hasToggles())
{ {
getToggles().values().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getToggles())); getToggles().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getToggles()));
update = true; update = true;
} }
} }
@@ -1045,7 +1040,7 @@ public final class CharEffectList
{ {
if (hasDebuffs()) if (hasDebuffs())
{ {
getDebuffs().values().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getDebuffs())); getDebuffs().stream().filter(Objects::nonNull).filter(info -> info.getSkill().isRemovedOnDamage()).forEach(info -> stopAndRemove(info, getDebuffs()));
update = true; update = true;
} }
} }
@@ -1148,7 +1143,7 @@ public final class CharEffectList
boolean update = false; boolean update = false;
if (hasBuffs()) if (hasBuffs())
{ {
for (BuffInfo info : getBuffs().values()) for (BuffInfo info : getBuffs())
{ {
update |= function.apply(info); update |= function.apply(info);
} }
@@ -1156,7 +1151,7 @@ public final class CharEffectList
if (hasTriggered()) if (hasTriggered())
{ {
for (BuffInfo info : getTriggered().values()) for (BuffInfo info : getTriggered())
{ {
update |= function.apply(info); update |= function.apply(info);
} }
@@ -1164,7 +1159,7 @@ public final class CharEffectList
if (dances && hasDances()) if (dances && hasDances())
{ {
for (BuffInfo info : getDances().values()) for (BuffInfo info : getDances())
{ {
update |= function.apply(info); update |= function.apply(info);
} }
@@ -1172,7 +1167,7 @@ public final class CharEffectList
if (hasToggles()) if (hasToggles())
{ {
for (BuffInfo info : getToggles().values()) for (BuffInfo info : getToggles())
{ {
update |= function.apply(info); update |= function.apply(info);
} }
@@ -1180,7 +1175,7 @@ public final class CharEffectList
if (hasDebuffs()) if (hasDebuffs())
{ {
for (BuffInfo info : getDebuffs().values()) for (BuffInfo info : getDebuffs())
{ {
update |= function.apply(info); update |= function.apply(info);
} }
@@ -1196,7 +1191,7 @@ public final class CharEffectList
*/ */
public void remove(boolean removed, BuffInfo info) public void remove(boolean removed, BuffInfo info)
{ {
if ((info == null) || !isAffectedBySkill(info.getSkill().getId())) if (info == null)
{ {
return; return;
} }
@@ -1241,13 +1236,15 @@ public final class CharEffectList
} }
// Puts the effects in the list. // Puts the effects in the list.
final BuffInfo infoToRemove = getPassives().put(skill.getId(), info); getPassives().stream().filter(b -> b.getSkill().getId() == skill.getId()).forEach(b ->
if (infoToRemove != null)
{ {
// Removes the old stats from the creature if the skill was present. // Removes the old stats from the creature if the skill was present.
infoToRemove.setInUse(false); b.setInUse(false);
infoToRemove.removeStats(); b.removeStats();
} getPassives().remove(b);
});
getPassives().add(info);
// Initialize effects. // Initialize effects.
info.initializeEffects(); info.initializeEffects();
@@ -1327,7 +1324,7 @@ public final class CharEffectList
} }
// Select the map that holds the effects related to this skill. // Select the map that holds the effects related to this skill.
final Map<Integer, BuffInfo> effects = getEffectList(skill); final Queue<BuffInfo> effects = getEffectList(skill);
// Remove first buff when buff list is full. // Remove first buff when buff list is full.
if (!skill.isDebuff() && !skill.isToggle() && !skill.is7Signs() && !doesStack(skill)) if (!skill.isDebuff() && !skill.isToggle() && !skill.is7Signs() && !doesStack(skill))
{ {
@@ -1345,7 +1342,7 @@ public final class CharEffectList
buffsToRemove = getBuffCount() - _owner.getStat().getMaxBuffCount(); buffsToRemove = getBuffCount() - _owner.getStat().getMaxBuffCount();
} }
for (BuffInfo bi : effects.values()) for (BuffInfo bi : effects)
{ {
if (buffsToRemove < 0) if (buffsToRemove < 0)
{ {
@@ -1370,7 +1367,7 @@ public final class CharEffectList
// After removing old buff (same ID) or stacked buff (same abnormal type), // After removing old buff (same ID) or stacked buff (same abnormal type),
// Add the buff to the end of the effect list. // Add the buff to the end of the effect list.
effects.put(skill.getId(), info); effects.add(info);
// Initialize effects. // Initialize effects.
info.initializeEffects(); info.initializeEffects();
// Update effect flags and icons. // Update effect flags and icons.
@@ -1443,7 +1440,7 @@ public final class CharEffectList
// Buffs. // Buffs.
if (hasBuffs()) if (hasBuffs())
{ {
for (BuffInfo info : getBuffs().values()) for (BuffInfo info : getBuffs())
{ {
if (info.getSkill().isHealingPotionSkill()) if (info.getSkill().isHealingPotionSkill())
{ {
@@ -1459,7 +1456,7 @@ public final class CharEffectList
// Triggered buffs. // Triggered buffs.
if (hasTriggered()) if (hasTriggered())
{ {
for (BuffInfo info : getTriggered().values()) for (BuffInfo info : getTriggered())
{ {
addIcon(info, asu, ps, psSummon, os, isSummon); addIcon(info, asu, ps, psSummon, os, isSummon);
} }
@@ -1468,7 +1465,7 @@ public final class CharEffectList
// Songs and dances. // Songs and dances.
if (hasDances()) if (hasDances())
{ {
for (BuffInfo info : getDances().values()) for (BuffInfo info : getDances())
{ {
addIcon(info, asu, ps, psSummon, os, isSummon); addIcon(info, asu, ps, psSummon, os, isSummon);
} }
@@ -1477,7 +1474,7 @@ public final class CharEffectList
// Toggles. // Toggles.
if (hasToggles()) if (hasToggles())
{ {
for (BuffInfo info : getToggles().values()) for (BuffInfo info : getToggles())
{ {
addIcon(info, asu, ps, psSummon, os, isSummon); addIcon(info, asu, ps, psSummon, os, isSummon);
} }
@@ -1486,7 +1483,7 @@ public final class CharEffectList
// Debuffs. // Debuffs.
if (hasDebuffs()) if (hasDebuffs())
{ {
for (BuffInfo info : getDebuffs().values()) for (BuffInfo info : getDebuffs())
{ {
addIcon(info, asu, ps, psSummon, os, isSummon); addIcon(info, asu, ps, psSummon, os, isSummon);
} }
@@ -1606,7 +1603,7 @@ public final class CharEffectList
{ {
if (hasBuffs()) if (hasBuffs())
{ {
for (BuffInfo info : getBuffs().values()) for (BuffInfo info : getBuffs())
{ {
if (info == null) if (info == null)
{ {
@@ -1627,7 +1624,7 @@ public final class CharEffectList
if (hasTriggered()) if (hasTriggered())
{ {
for (BuffInfo info : getTriggered().values()) for (BuffInfo info : getTriggered())
{ {
if (info == null) if (info == null)
{ {
@@ -1648,7 +1645,7 @@ public final class CharEffectList
if (hasToggles()) if (hasToggles())
{ {
for (BuffInfo info : getToggles().values()) for (BuffInfo info : getToggles())
{ {
if (info == null) if (info == null)
{ {
@@ -1669,7 +1666,7 @@ public final class CharEffectList
if (hasDebuffs()) if (hasDebuffs())
{ {
for (BuffInfo info : getDebuffs().values()) for (BuffInfo info : getDebuffs())
{ {
if ((info != null) && info.getSkill().isRemovedOnDamage()) if ((info != null) && info.getSkill().isRemovedOnDamage())
{ {
@@ -1688,7 +1685,7 @@ public final class CharEffectList
int flags = 0; int flags = 0;
if (hasBuffs()) if (hasBuffs())
{ {
for (BuffInfo info : getBuffs().values()) for (BuffInfo info : getBuffs())
{ {
if (info != null) if (info != null)
{ {
@@ -1702,7 +1699,7 @@ public final class CharEffectList
if (hasTriggered()) if (hasTriggered())
{ {
for (BuffInfo info : getTriggered().values()) for (BuffInfo info : getTriggered())
{ {
if (info != null) if (info != null)
{ {
@@ -1716,7 +1713,7 @@ public final class CharEffectList
if (hasDebuffs()) if (hasDebuffs())
{ {
for (BuffInfo info : getDebuffs().values()) for (BuffInfo info : getDebuffs())
{ {
if (info != null) if (info != null)
{ {
@@ -1730,7 +1727,7 @@ public final class CharEffectList
if (hasDances()) if (hasDances())
{ {
for (BuffInfo info : getDances().values()) for (BuffInfo info : getDances())
{ {
if (info != null) if (info != null)
{ {
@@ -1744,7 +1741,7 @@ public final class CharEffectList
if (hasToggles()) if (hasToggles())
{ {
for (BuffInfo info : getToggles().values()) for (BuffInfo info : getToggles())
{ {
if (info != null) if (info != null)
{ {

View File

@@ -3153,7 +3153,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
*/ */
public void resetCurrentAbnormalVisualEffects() public void resetCurrentAbnormalVisualEffects()
{ {
final Collection<BuffInfo> passives = getEffectList().hasPassives() ? new ArrayList<>(getEffectList().getPassives().values()) : null; final Collection<BuffInfo> passives = getEffectList().hasPassives() ? new ArrayList<>(getEffectList().getPassives()) : null;
//@formatter:off //@formatter:off
final Set<AbnormalVisualEffect> abnormalVisualEffects = Stream.concat(getEffectList().getEffects().stream(), passives != null ? passives.stream() : Stream.empty()) final Set<AbnormalVisualEffect> abnormalVisualEffects = Stream.concat(getEffectList().getEffects().stream(), passives != null ? passives.stream() : Stream.empty())
.filter(Objects::nonNull) .filter(Objects::nonNull)

View File

@@ -100,7 +100,7 @@ public final class CubicAction implements Runnable
boolean useCubicCure = false; boolean useCubicCure = false;
if (((_cubic.getId() >= L2CubicInstance.SMART_CUBIC_EVATEMPLAR) && (_cubic.getId() <= L2CubicInstance.SMART_CUBIC_SPECTRALMASTER)) || (_cubic.getId() == L2CubicInstance.AVENGING_CUBIC)) if (((_cubic.getId() >= L2CubicInstance.SMART_CUBIC_EVATEMPLAR) && (_cubic.getId() <= L2CubicInstance.SMART_CUBIC_SPECTRALMASTER)) || (_cubic.getId() == L2CubicInstance.AVENGING_CUBIC))
{ {
for (BuffInfo info : _cubic.getOwner().getEffectList().getDebuffs().values()) for (BuffInfo info : _cubic.getOwner().getEffectList().getDebuffs())
{ {
if (info.getSkill().canBeDispeled()) if (info.getSkill().canBeDispeled())
{ {

View File

@@ -2041,14 +2041,14 @@ public final class Formulas
} }
// Prevent initialization. // Prevent initialization.
final List<BuffInfo> buffs = target.getEffectList().hasBuffs() ? new ArrayList<>(target.getEffectList().getBuffs().values()) : new ArrayList<>(1); final List<BuffInfo> buffs = target.getEffectList().hasBuffs() ? new ArrayList<>(target.getEffectList().getBuffs()) : new ArrayList<>(1);
if (target.getEffectList().hasTriggered()) if (target.getEffectList().hasTriggered())
{ {
buffs.addAll(target.getEffectList().getTriggered().values()); buffs.addAll(target.getEffectList().getTriggered());
} }
if (target.getEffectList().hasDances()) if (target.getEffectList().hasDances())
{ {
buffs.addAll(target.getEffectList().getDances().values()); buffs.addAll(target.getEffectList().getDances());
} }
for (int i = buffs.size() - 1; i >= 0; i--) // reverse order for (int i = buffs.size() - 1; i >= 0; i--) // reverse order
{ {
@@ -2067,7 +2067,7 @@ public final class Formulas
} }
case "debuff": case "debuff":
{ {
final List<BuffInfo> debuffs = new ArrayList<>(target.getEffectList().getDebuffs().values()); final List<BuffInfo> debuffs = new ArrayList<>(target.getEffectList().getDebuffs());
for (int i = debuffs.size() - 1; i >= 0; i--) for (int i = debuffs.size() - 1; i >= 0; i--)
{ {
BuffInfo info = debuffs.get(i); BuffInfo info = debuffs.get(i);