Removal of Creature effect and skill getter conversions to arrays.

This commit is contained in:
MobiusDevelopment
2021-04-21 22:06:59 +00:00
parent 7fe7f49ab3
commit 6d16bebe1a
45 changed files with 425 additions and 886 deletions

View File

@@ -385,15 +385,11 @@ public class Baium extends Quest
if (attacker.getMountType() == 1) if (attacker.getMountType() == 1)
{ {
int sk4258 = 0; int sk4258 = 0;
final Effect[] effects = attacker.getAllEffects(); for (Effect e : attacker.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4258)
{ {
if (e.getSkill().getId() == 4258) sk4258 = 1;
{
sk4258 = 1;
}
} }
} }
if (sk4258 == 0) if (sk4258 == 0)

View File

@@ -158,17 +158,13 @@ public class Valakas extends Quest
{ {
int level = 0; int level = 0;
int sk4691 = 0; int sk4691 = 0;
final Effect[] effects = npc.getAllEffects(); for (Effect e : npc.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4629)
{ {
if (e.getSkill().getId() == 4629) sk4691 = 1;
{ level = e.getSkill().getLevel();
sk4691 = 1; break;
level = e.getSkill().getLevel();
break;
}
} }
} }
@@ -376,15 +372,11 @@ public class Valakas extends Quest
if (attacker.getMountType() == 1) if (attacker.getMountType() == 1)
{ {
int sk4258 = 0; int sk4258 = 0;
final Effect[] effects = attacker.getAllEffects(); for (Effect e : attacker.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4258)
{ {
if (e.getSkill().getId() == 4258) sk4258 = 1;
{
sk4258 = 1;
}
} }
} }
if (sk4258 == 0) if (sk4258 == 0)

View File

@@ -212,19 +212,15 @@ public class Zaken extends Quest
} }
int sk4223 = 0; int sk4223 = 0;
int sk4227 = 0; int sk4227 = 0;
final Effect[] effects = npc.getAllEffects(); for (Effect e : npc.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4227)
{ {
if (e.getSkill().getId() == 4227) sk4227 = 1;
{ }
sk4227 = 1; if (e.getSkill().getId() == 4223)
} {
if (e.getSkill().getId() == 4223) sk4223 = 1;
{
sk4223 = 1;
}
} }
} }
if (getTimeHour() < 5) if (getTimeHour() < 5)
@@ -754,15 +750,11 @@ public class Zaken extends Quest
if (attacker.getMountType() == 1) if (attacker.getMountType() == 1)
{ {
int sk4258 = 0; int sk4258 = 0;
final Effect[] effects = attacker.getAllEffects(); for (Effect e : attacker.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4258)
{ {
if (e.getSkill().getId() == 4258) sk4258 = 1;
{
sk4258 = 1;
}
} }
} }
if (sk4258 == 0) if (sk4258 == 0)

View File

@@ -20,6 +20,8 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.Collection;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.GameTimeController; import org.l2jmobius.gameserver.GameTimeController;
@@ -749,7 +751,7 @@ public class AttackableAI extends CreatureAI
} }
// Get all information needed to chose between physical or magical attack // Get all information needed to chose between physical or magical attack
Skill[] skills = null; Collection<Skill> skills = null;
double dist2 = 0; double dist2 = 0;
int range = 0; int range = 0;
@@ -902,10 +904,8 @@ public class AttackableAI extends CreatureAI
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;
@@ -963,10 +963,8 @@ public class AttackableAI extends CreatureAI
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;

View File

@@ -20,6 +20,7 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@@ -188,14 +189,13 @@ public class ControllableMobAI extends AttackableAI
final ControllableMobAI ctrlAi = (ControllableMobAI) theTarget.getAI(); final ControllableMobAI ctrlAi = (ControllableMobAI) theTarget.getAI();
ctrlAi.forceAttack(_actor); ctrlAi.forceAttack(_actor);
final Skill[] skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(target); final double dist2 = _actor.calculateDistanceSq2D(target);
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + target.getTemplate().getCollisionRadius(); final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + target.getTemplate().getCollisionRadius();
int maxRange = range; int maxRange = range;
if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20)))) if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20))))
{ {
// check distant skills // check distant skills
for (Skill sk : skills) for (Skill sk : _actor.getAllSkills())
{ {
final int castRange = sk.getCastRange(); final int castRange = sk.getCastRange();
if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk))) if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk)))
@@ -225,14 +225,13 @@ public class ControllableMobAI extends AttackableAI
} }
_actor.setTarget(getForcedTarget()); _actor.setTarget(getForcedTarget());
final Skill[] skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(getForcedTarget()); final double dist2 = _actor.calculateDistanceSq2D(getForcedTarget());
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getForcedTarget().getTemplate().getCollisionRadius(); final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getForcedTarget().getTemplate().getCollisionRadius();
int maxRange = range; int maxRange = range;
if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20)))) if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20))))
{ {
// check distant skills // check distant skills
for (Skill sk : skills) for (Skill sk : _actor.getAllSkills())
{ {
final int castRange = sk.getCastRange(); final int castRange = sk.getCastRange();
if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk))) if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk)))
@@ -292,7 +291,7 @@ public class ControllableMobAI extends AttackableAI
} }
_actor.setTarget(getAttackTarget()); _actor.setTarget(getAttackTarget());
final Skill[] skills = _actor.getAllSkills(); final Collection<Skill> skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(getAttackTarget()); final double dist2 = _actor.calculateDistanceSq2D(getAttackTarget());
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius(); final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
int maxRange = range; int maxRange = range;
@@ -335,7 +334,7 @@ public class ControllableMobAI extends AttackableAI
setAttackTarget(hated); setAttackTarget(hated);
} }
if (!_actor.isMuted() && (skills.length > 0) && (Rnd.get(5) == 3)) if (!_actor.isMuted() && (!skills.isEmpty()) && (Rnd.get(5) == 3))
{ {
for (Skill sk : skills) for (Skill sk : skills)
{ {

View File

@@ -21,6 +21,7 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -585,7 +586,7 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
private void attackPrepare() private void attackPrepare()
{ {
// Get all information needed to choose between physical or magical attack // Get all information needed to choose between physical or magical attack
Skill[] skills = null; Collection<Skill> skills = null;
double dist2 = 0; double dist2 = 0;
int range = 0; int range = 0;
FortSiegeGuardInstance sGuard; FortSiegeGuardInstance sGuard;
@@ -650,10 +651,8 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
} }
if (sk.getSkillType() == SkillType.BUFF) if (sk.getSkillType() == SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;
@@ -788,10 +787,8 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
} }
if (sk.getSkillType() == SkillType.BUFF) if (sk.getSkillType() == SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;

View File

@@ -20,6 +20,7 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.Collection;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -307,7 +308,7 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
private void attackPrepare() private void attackPrepare()
{ {
// Get all information needed to chose between physical or magical attack // Get all information needed to chose between physical or magical attack
Skill[] skills = null; Collection<Skill> skills = null;
double dist2 = 0; double dist2 = 0;
int range = 0; int range = 0;
final SiegeGuardInstance sGuard = (SiegeGuardInstance) _actor; final SiegeGuardInstance sGuard = (SiegeGuardInstance) _actor;
@@ -368,10 +369,8 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
} }
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;
@@ -485,10 +484,8 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;

View File

@@ -342,7 +342,7 @@ public class SkillTreeTable
skills.addAll(_expandDwarfCraftSkillTrees); skills.addAll(_expandDwarfCraftSkillTrees);
} }
final Skill[] oldSkills = player.getAllSkills(); final Skill[] oldSkills = player.getAllSkills().toArray(new Skill[0]);
for (SkillLearn temp : skills) for (SkillLearn temp : skills)
{ {
if (temp.getMinLevel() <= player.getLevel()) if (temp.getMinLevel() <= player.getLevel())
@@ -378,7 +378,7 @@ public class SkillTreeTable
final List<EnchantSkillLearn> skills = new ArrayList<>(); final List<EnchantSkillLearn> skills = new ArrayList<>();
skills.addAll(_enchantSkillTrees); skills.addAll(_enchantSkillTrees);
final Skill[] oldSkills = player.getAllSkills(); final Skill[] oldSkills = player.getAllSkills().toArray(new Skill[0]);
if (player.getLevel() < 76) if (player.getLevel() < 76)
{ {
return result.toArray(new EnchantSkillLearn[result.size()]); return result.toArray(new EnchantSkillLearn[result.size()]);

View File

@@ -178,7 +178,7 @@ public class AdminBuffs implements IAdminCommandHandler
html.append("<table>"); html.append("<table>");
html.append("<tr><td width=200>Skill</td><td width=70>Action</td></tr>"); html.append("<tr><td width=200>Skill</td><td width=70>Action</td></tr>");
final Effect[] effects = player.getAllEffects(); final Effect[] effects = player.getAllEffects().toArray(new Effect[0]);
for (Effect e : effects) for (Effect e : effects)
{ {
if (e != null) if (e != null)
@@ -202,7 +202,7 @@ public class AdminBuffs implements IAdminCommandHandler
final PlayerInstance player = World.getInstance().getPlayer(playername); final PlayerInstance player = World.getInstance().getPlayer(playername);
if ((player != null) && (SkillId > 0)) if ((player != null) && (SkillId > 0))
{ {
final Effect[] effects = player.getAllEffects(); final Effect[] effects = player.getAllEffects().toArray(new Effect[0]);
for (Effect e : effects) for (Effect e : effects)
{ {
if ((e != null) && (e.getSkill().getId() == SkillId)) if ((e != null) && (e.getSkill().getId() == SkillId))

View File

@@ -247,7 +247,7 @@ public class AdminSkill implements IAdminCommandHandler
return; return;
} }
final Skill[] skills = player.getAllSkills(); final Skill[] skills = player.getAllSkills().toArray(new Skill[0]);
final int maxSkillsPerPage = 10; final int maxSkillsPerPage = 10;
int maxPages = skills.length / maxSkillsPerPage; int maxPages = skills.length / maxSkillsPerPage;
if (skills.length > (maxSkillsPerPage * maxPages)) if (skills.length > (maxSkillsPerPage * maxPages))
@@ -353,8 +353,8 @@ public class AdminSkill implements IAdminCommandHandler
} }
else else
{ {
final Skill[] skills = player.getAllSkills(); final Skill[] skills = player.getAllSkills().toArray(new Skill[0]);
adminSkills = activeChar.getAllSkills(); adminSkills = activeChar.getAllSkills().toArray(new Skill[0]);
for (Skill adminSkill : adminSkills) for (Skill adminSkill : adminSkills)
{ {
activeChar.removeSkill(adminSkill); activeChar.removeSkill(adminSkill);
@@ -392,15 +392,16 @@ public class AdminSkill implements IAdminCommandHandler
} }
else else
{ {
final Skill[] skills = player.getAllSkills(); final Skill[] skills = player.getAllSkills().toArray(new Skill[0]);
for (Skill skill : skills) for (Skill skill : skills)
{ {
player.removeSkill(skill); player.removeSkill(skill);
} }
for (int i = 0; i < activeChar.getAllSkills().length; i++) final Skill[] skills2 = activeChar.getAllSkills().toArray(new Skill[0]);
for (Skill skill : skills2)
{ {
player.addSkill(activeChar.getAllSkills()[i], true); player.addSkill(skill, true);
} }
for (Skill skill : skills) for (Skill skill : skills)

View File

@@ -740,19 +740,13 @@ public class Potions implements IItemHandler
private boolean isEffectReplaceable(Playable activeChar, Enum<EffectType> effectType, int itemId) private boolean isEffectReplaceable(Playable activeChar, Enum<EffectType> effectType, int itemId)
{ {
final Effect[] effects = activeChar.getAllEffects(); for (Effect effect : activeChar.getAllEffects())
if (effects == null)
{ {
return true; if ((effect.getEffectType() == effectType) && effect.getSkill().isPotion())
}
for (Effect e : effects)
{
if ((e.getEffectType() == effectType) && e.getSkill().isPotion())
{ {
// One can reuse pots after 2/3 of their duration is over. // One can reuse pots after 2/3 of their duration is over.
// It would be faster to check if its > 10 but that would screw custom pot durations... // It would be faster to check if its > 10 but that would screw custom pot durations...
if (e.getTaskTime() > ((e.getSkill().getBuffDuration() * 67) / 100000)) if (effect.getTaskTime() > ((effect.getSkill().getBuffDuration() * 67) / 100000))
{ {
return true; return true;
} }

View File

@@ -63,12 +63,11 @@ public class Remedy implements IItemHandler
final int itemId = item.getItemId(); final int itemId = item.getItemId();
if (itemId == 1831) // antidote if (itemId == 1831) // antidote
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.POISON) && (e.getSkill().getLevel() <= 3)) if ((effect.getSkill().getSkillType() == Skill.SkillType.POISON) && (effect.getSkill().getLevel() <= 3))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -79,12 +78,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 1832) // advanced antidote else if (itemId == 1832) // advanced antidote
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.POISON) && (e.getSkill().getLevel() <= 7)) if ((effect.getSkill().getSkillType() == Skill.SkillType.POISON) && (effect.getSkill().getLevel() <= 7))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -95,12 +93,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 1833) // bandage else if (itemId == 1833) // bandage
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.BLEED) && (e.getSkill().getLevel() <= 3)) if ((effect.getSkill().getSkillType() == Skill.SkillType.BLEED) && (effect.getSkill().getLevel() <= 3))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -111,12 +108,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 1834) // emergency dressing else if (itemId == 1834) // emergency dressing
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.BLEED) && (e.getSkill().getLevel() <= 7)) if ((effect.getSkill().getSkillType() == Skill.SkillType.BLEED) && (effect.getSkill().getLevel() <= 7))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -127,12 +123,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 3889) // potion of recovery else if (itemId == 3889) // potion of recovery
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if (e.getSkill().getId() == 4082) if (effect.getSkill().getId() == 4082)
{ {
e.exit(true); effect.exit(true);
} }
} }

View File

@@ -192,16 +192,12 @@ public class Continuous implements ISkillHandler
{ {
boolean stopped = false; boolean stopped = false;
final Effect[] effects = target.getAllEffects(); for (Effect e : target.getAllEffects())
if (effects != null)
{ {
for (Effect e : effects) if ((e != null) && (e.getSkill().getId() == skill.getId()))
{ {
if ((e != null) && (e.getSkill().getId() == skill.getId())) e.exit(false);
{ stopped = true;
e.exit(false);
stopped = true;
}
} }
} }

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -201,12 +202,11 @@ public class Disablers implements ISkillHandler
// do nothing if not on mob // do nothing if not on mob
if (Formulas.getInstance().calcSkillSuccess(creature, target, skill, ss, sps, bss)) if (Formulas.getInstance().calcSkillSuccess(creature, target, skill, ss, sps, bss))
{ {
final Effect[] effects = target.getAllEffects(); for (Effect effect : target.getAllEffects())
for (Effect e : effects)
{ {
if (e.getSkill().getSkillType() == type) if (effect.getSkill().getSkillType() == type)
{ {
e.exit(false); effect.exit(false);
} }
} }
skill.applyEffects(creature, target, ss, sps, bss); skill.applyEffects(creature, target, ss, sps, bss);
@@ -364,12 +364,11 @@ public class Disablers implements ISkillHandler
{ {
continue; continue;
} }
final Effect[] effects = target1.getAllEffects(); for (Effect effect : target1.getAllEffects())
for (Effect e : effects)
{ {
if (e.getStackType().equals("mAtkSpeedUp") || e.getStackType().equals("mAtk") || (e.getSkill().getId() == 1059) || (e.getSkill().getId() == 1085) || (e.getSkill().getId() == 4356) || (e.getSkill().getId() == 4355)) if (effect.getStackType().equals("mAtkSpeedUp") || effect.getStackType().equals("mAtk") || (effect.getSkill().getId() == 1059) || (effect.getSkill().getId() == 1085) || (effect.getSkill().getId() == 4356) || (effect.getSkill().getId() == 4355))
{ {
e.exit(); effect.exit();
} }
} }
} }
@@ -388,12 +387,11 @@ public class Disablers implements ISkillHandler
{ {
continue; continue;
} }
final Effect[] effects = target1.getAllEffects(); for (Effect effect : target1.getAllEffects())
for (Effect e : effects)
{ {
if (e.getStackType().equals("SpeedUp") || e.getStackType().equals("pAtkSpeedUp") || (e.getSkill().getId() == 1204) || (e.getSkill().getId() == 1086) || (e.getSkill().getId() == 4342) || (e.getSkill().getId() == 4357)) if (effect.getStackType().equals("SpeedUp") || effect.getStackType().equals("pAtkSpeedUp") || (effect.getSkill().getId() == 1204) || (effect.getSkill().getId() == 1086) || (effect.getSkill().getId() == 4342) || (effect.getSkill().getId() == 4357))
{ {
e.exit(); effect.exit();
} }
} }
} }
@@ -445,7 +443,7 @@ public class Disablers implements ISkillHandler
landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null); landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null);
if (Rnd.get(100) < landrate) if (Rnd.get(100) < landrate)
{ {
final Effect[] effects = target.getAllEffects(); final Collection<Effect> effects = target.getAllEffects();
int maxfive = 5; int maxfive = 5;
for (Effect e : effects) for (Effect e : effects)
{ {
@@ -523,15 +521,14 @@ public class Disablers implements ISkillHandler
landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null); landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null);
if (Rnd.get(100) < landrate) if (Rnd.get(100) < landrate)
{ {
final Effect[] effects = target.getAllEffects();
int maxdisp = (int) skill.getNegatePower(); int maxdisp = (int) skill.getNegatePower();
if (maxdisp == 0) if (maxdisp == 0)
{ {
maxdisp = Config.BUFFS_MAX_AMOUNT + Config.DEBUFFS_MAX_AMOUNT + 6; maxdisp = Config.BUFFS_MAX_AMOUNT + Config.DEBUFFS_MAX_AMOUNT + 6;
} }
for (Effect e : effects) for (Effect effect : target.getAllEffects())
{ {
switch (e.getEffectType()) switch (effect.getEffectType())
{ {
case SIGNET_GROUND: case SIGNET_GROUND:
case SIGNET_EFFECT: case SIGNET_EFFECT:
@@ -540,10 +537,10 @@ public class Disablers implements ISkillHandler
} }
} }
if ((e.getSkill().getId() != 4082) && (e.getSkill().getId() != 4215) && (e.getSkill().getId() != 5182) && (e.getSkill().getId() != 4515) && (e.getSkill().getId() != 110) && (e.getSkill().getId() != 111) && (e.getSkill().getId() != 1323) && (e.getSkill().getId() != 1325) && (e.getSkill().getSkillType() == SkillType.BUFF)) if ((effect.getSkill().getId() != 4082) && (effect.getSkill().getId() != 4215) && (effect.getSkill().getId() != 5182) && (effect.getSkill().getId() != 4515) && (effect.getSkill().getId() != 110) && (effect.getSkill().getId() != 111) && (effect.getSkill().getId() != 1323) && (effect.getSkill().getId() != 1325) && (effect.getSkill().getSkillType() == SkillType.BUFF))
{ {
int rate = 100; int rate = 100;
final int level = e.getLevel(); final int level = effect.getLevel();
if (level > 0) if (level > 0)
{ {
rate = 150 / (1 + level); rate = 150 / (1 + level);
@@ -560,7 +557,7 @@ public class Disablers implements ISkillHandler
if (Rnd.get(100) < rate) if (Rnd.get(100) < rate)
{ {
e.exit(true); effect.exit(true);
maxdisp--; maxdisp--;
if (maxdisp == 0) if (maxdisp == 0)
{ {
@@ -764,8 +761,7 @@ public class Disablers implements ISkillHandler
private void negateEffect(Creature target, SkillType type, double power, int skillId) private void negateEffect(Creature target, SkillType type, double power, int skillId)
{ {
final Effect[] effects = target.getAllEffects(); for (Effect e : target.getAllEffects())
for (Effect e : effects)
{ {
if (((e.getSkill() != null) && (e.getSkill().getId() == 4215)) || (e.getSkill().getId() == 4515)) if (((e.getSkill() != null) && (e.getSkill().getId() == 4215)) || (e.getSkill().getId() == 4515))
{ {

View File

@@ -2968,9 +2968,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
private int _AbnormalEffects; private int _AbnormalEffects;
/** /**
* FastTable containing all active skills effects in progress of a Creature. * Set containing all active skills effects in progress of a Creature.
*/ */
private final List<Effect> _effects = new ArrayList<>(); private final Set<Effect> _effects = ConcurrentHashMap.newKeySet();
/** The table containing the List of all stacked effect in progress for each Stack group Identifier. */ /** The table containing the List of all stacked effect in progress for each Stack group Identifier. */
protected Map<String, List<Effect>> _stackedEffects = new HashMap<>(); protected Map<String, List<Effect>> _stackedEffects = new HashMap<>();
@@ -3026,20 +3026,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return; return;
} }
final Effect[] effects = getAllEffects();
// Make sure there's no same effect previously // Make sure there's no same effect previously
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if ((effect.getSkill().getId() == newEffect.getSkill().getId()) && (effect.getEffectType() == newEffect.getEffectType()) && (effect.getStackType().equals(newEffect.getStackType()))) if ((effect.getSkill().getId() == newEffect.getSkill().getId()) && (effect.getEffectType() == newEffect.getEffectType()) && (effect.getStackType().equals(newEffect.getStackType())))
{ {
if (((newEffect.getSkill().getSkillType() == SkillType.BUFF) || (newEffect.getEffectType() == Effect.EffectType.BUFF) || (newEffect.getEffectType() == Effect.EffectType.HEAL_OVER_TIME)) && (newEffect.getStackOrder() >= effect.getStackOrder())) if (((newEffect.getSkill().getSkillType() == SkillType.BUFF) || (newEffect.getEffectType() == Effect.EffectType.BUFF) || (newEffect.getEffectType() == Effect.EffectType.HEAL_OVER_TIME)) && (newEffect.getStackOrder() >= effect.getStackOrder()))
@@ -3073,41 +3062,31 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
removeFirstDeBuff(tempskill.getId()); removeFirstDeBuff(tempskill.getId());
} }
synchronized (_effects) // Add the Effect to all effect in progress on the Creature
{ // if (!newEffect.getSkill().isToggle())
// Add the Effect to all effect in progress on the Creature // {
if (!newEffect.getSkill().isToggle()) // int pos = 0;
{ // for (int i = 0; i < _effects.size(); i++)
int pos = 0; // {
for (int i = 0; i < _effects.size(); i++) // if (_effects.get(i) != null)
{ // {
if (_effects.get(i) == null) // final int skillId = _effects.get(i).getSkill().getId();
{ // if (!_effects.get(i).getSkill().isToggle() && ((skillId <= 4360) || (skillId >= 4367)))
_effects.remove(i); // {
i--; // pos++;
continue; // }
} // }
// else
if (_effects.get(i) != null) // {
{ // break;
final int skillId = _effects.get(i).getSkill().getId(); // }
if (!_effects.get(i).getSkill().isToggle() && ((skillId <= 4360) || (skillId >= 4367))) // }
{ // _effects.add(pos, newEffect);
pos++; // }
} // else
} // {
else _effects.add(newEffect);
{ // }
break;
}
}
_effects.add(pos, newEffect);
}
else
{
_effects.add(newEffect);
}
}
// Check if a stack group is defined for this effect // Check if a stack group is defined for this effect
if (newEffect.getStackType().equals("none")) if (newEffect.getStackType().equals("none"))
@@ -3197,11 +3176,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
// skill.exit() could be used, if the users don't wish to see "effect removed" always when a timer goes off, even if the buff isn't active any more (has been replaced). but then check e.g. npc hold and raid petrify. // skill.exit() could be used, if the users don't wish to see "effect removed" always when a timer goes off, even if the buff isn't active any more (has been replaced). but then check e.g. npc hold and raid petrify.
if (Config.EFFECT_CANCELING && !newStackedEffect.isHerbEffect() && (stackQueue.size() > 1)) if (Config.EFFECT_CANCELING && !newStackedEffect.isHerbEffect() && (stackQueue.size() > 1))
{ {
synchronized (_effects) _effects.remove(stackQueue.get(1));
{
_effects.remove(stackQueue.get(1));
}
stackQueue.remove(1); stackQueue.remove(1);
} }
@@ -3284,11 +3259,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
} }
synchronized (_effects) // Remove the active skill L2effect from _effects of the Creature
{ _effects.remove(effect);
// Remove the active skill L2effect from _effects of the Creature
_effects.remove(effect);
}
// Update active skills in progress (In Use and Not In Use because stacked) icones on client // Update active skills in progress (In Use and Not In Use because stacked) icones on client
updateEffectIcons(); updateEffectIcons();
@@ -3458,20 +3430,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopAllEffects() public void stopAllEffects()
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if (effect != null) effect.exit(true);
{
effect.exit(true);
}
else
{
synchronized (_effects)
{
_effects.remove(effect);
}
}
} }
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
@@ -3543,15 +3504,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopSkillEffects(int skillId) public void stopSkillEffects(int skillId)
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if ((effect == null) || (effect.getSkill() == null)) if (effect.getSkill() == null)
{ {
synchronized (_effects) _effects.remove(effect);
{
_effects.remove(effect);
}
continue; continue;
} }
@@ -3577,18 +3534,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopEffects(Effect.EffectType type) public void stopEffects(Effect.EffectType type)
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getEffectType() == type) if (effect.getEffectType() == type)
{ {
effect.exit(true); effect.exit(true);
@@ -3607,15 +3554,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopSkillEffects(SkillType skillType, double power) public void stopSkillEffects(SkillType skillType, double power)
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if ((effect == null) || (effect.getSkill() == null)) if (effect.getSkill() == null)
{ {
synchronized (_effects) _effects.remove(effect);
{
_effects.remove(effect);
}
continue; continue;
} }
@@ -3897,44 +3840,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
// Go through all effects if any // Go through all effects if any
synchronized (_effects) for (Effect effect : _effects)
{ {
for (int i = 0; i < _effects.size(); i++) if (effect.getSkill() == null)
{ {
if ((_effects.get(i) == null) || (_effects.get(i).getSkill() == null)) _effects.remove(effect);
continue;
}
// C4
if (!effect.getShowIcon() && !effect.getSkill().isPotion())
{
continue;
}
if ((effect.getEffectType() == Effect.EffectType.CHARGE) && (player != null))
{
// handled by EtcStatusUpdate
continue;
}
if (effect.getInUse())
{
if (mi != null)
{ {
_effects.remove(i); effect.addIcon(mi);
i--;
continue;
} }
// Like L2OFF toggle and healing potions must not be showed on party buff list
// C4 if ((ps != null) && !effect.getSkill().isToggle() && (effect.getSkill().getId() != 2031) && (effect.getSkill().getId() != 2037) && (effect.getSkill().getId() != 2032))
if (!_effects.get(i).getShowIcon() && !_effects.get(i).getSkill().isPotion())
{ {
continue; effect.addPartySpelledIcon(ps);
} }
if (os != null)
if ((_effects.get(i).getEffectType() == Effect.EffectType.CHARGE) && (player != null))
{ {
// handled by EtcStatusUpdate effect.addOlympiadSpelledIcon(os);
continue;
}
if (_effects.get(i).getInUse())
{
if (mi != null)
{
_effects.get(i).addIcon(mi);
}
// Like L2OFF toggle and healing potions must not be showed on party buff list
if ((ps != null) && !_effects.get(i).getSkill().isToggle() && (_effects.get(i).getSkill().getId() != 2031) && (_effects.get(i).getSkill().getId() != 2037) && (_effects.get(i).getSkill().getId() != 2032))
{
_effects.get(i).addPartySpelledIcon(ps);
}
if (os != null)
{
_effects.get(i).addOlympiadSpelledIcon(os);
}
} }
} }
} }
@@ -4026,12 +3965,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* All active skills effects in progress on the Creature are identified in <b>_effects</b>. The Integer key of _effects is the Skill Identifier that has created the effect. * All active skills effects in progress on the Creature are identified in <b>_effects</b>. The Integer key of _effects is the Skill Identifier that has created the effect.
* @return A table containing all active skills effect in progress on the Creature * @return A table containing all active skills effect in progress on the Creature
*/ */
public Effect[] getAllEffects() public Collection<Effect> getAllEffects()
{ {
synchronized (_effects) return _effects;
{
return _effects.toArray(new Effect[_effects.size()]);
}
} }
/** /**
@@ -4045,19 +3981,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(int index) public Effect getFirstEffect(int index)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getSkill().getId() == index) if (effect.getSkill().getId() == index)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -4082,19 +4008,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(SkillType type) public Effect getFirstEffect(SkillType type)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getSkill().getSkillType() == type) if (effect.getSkill().getSkillType() == type)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -4108,7 +4024,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
} }
} }
return effNotInUse; return effNotInUse;
} }
@@ -4123,19 +4038,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(Skill skill) public Effect getFirstEffect(Skill skill)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getSkill() == skill) if (effect.getSkill() == skill)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -4164,19 +4069,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(Effect.EffectType tp) public Effect getFirstEffect(Effect.EffectType tp)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getEffectType() == tp) if (effect.getEffectType() == tp)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -6837,9 +6732,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* All skills own by a Creature are identified in <b>_skills</b> the Creature * All skills own by a Creature are identified in <b>_skills</b> the Creature
* @return the all skills * @return the all skills
*/ */
public Skill[] getAllSkills() public Collection<Skill> getAllSkills()
{ {
return _skills.values().toArray(new Skill[_skills.values().size()]); return _skills.values();
} }
/** /**
@@ -6889,25 +6784,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public int getBuffCount() public int getBuffCount()
{ {
final Effect[] effects = getAllEffects();
int numBuffs = 0; int numBuffs = 0;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null) if (((effect.getSkill().getSkillType() == SkillType.BUFF) || (effect.getSkill().getId() == 1416) || (effect.getSkill().getSkillType() == SkillType.REFLECT) || (effect.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (effect.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((effect.getSkill().getId() <= 4360) || (effect.getSkill().getId() >= 4367))) // 7s
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (((e.getSkill().getSkillType() == SkillType.BUFF) || (e.getSkill().getId() == 1416) || (e.getSkill().getSkillType() == SkillType.REFLECT) || (e.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (e.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((e.getSkill().getId() <= 4360) || (e.getSkill().getId() >= 4367))) // 7s
{ {
numBuffs++; numBuffs++;
} }
} }
return numBuffs; return numBuffs;
} }
@@ -6917,26 +6801,15 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public int getDeBuffCount() public int getDeBuffCount()
{ {
final Effect[] effects = getAllEffects();
int numDeBuffs = 0; int numDeBuffs = 0;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null)
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
// Check for all debuff skills // Check for all debuff skills
if (e.getSkill().isDebuff()) if (effect.getSkill().isDebuff())
{ {
numDeBuffs++; numDeBuffs++;
} }
} }
return numDeBuffs; return numDeBuffs;
} }
@@ -6955,34 +6828,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void removeFirstBuff(int preferSkill) public void removeFirstBuff(int preferSkill)
{ {
final Effect[] effects = getAllEffects();
Effect removeMe = null; Effect removeMe = null;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null) if (((effect.getSkill().getSkillType() == SkillType.BUFF) || (effect.getSkill().getSkillType() == SkillType.REFLECT) || (effect.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (effect.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((effect.getSkill().getId() <= 4360) || (effect.getSkill().getId() >= 4367)))
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (((e.getSkill().getSkillType() == SkillType.BUFF) || (e.getSkill().getSkillType() == SkillType.REFLECT) || (e.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (e.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((e.getSkill().getId() <= 4360) || (e.getSkill().getId() >= 4367)))
{ {
if (preferSkill == 0) if (preferSkill == 0)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (e.getSkill().getId() == preferSkill) else if (effect.getSkill().getId() == preferSkill)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (removeMe == null) else if (removeMe == null)
{ {
removeMe = e; removeMe = effect;
} }
} }
} }
@@ -6999,34 +6862,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void removeFirstDeBuff(int preferSkill) public void removeFirstDeBuff(int preferSkill)
{ {
final Effect[] effects = getAllEffects();
Effect removeMe = null; Effect removeMe = null;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null) if (effect.getSkill().isDebuff())
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (e.getSkill().isDebuff())
{ {
if (preferSkill == 0) if (preferSkill == 0)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (e.getSkill().getId() == preferSkill) else if (effect.getSkill().getId() == preferSkill)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (removeMe == null) else if (removeMe == null)
{ {
removeMe = e; removeMe = effect;
} }
} }
} }
@@ -7044,25 +6897,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
public int getDanceCount() public int getDanceCount()
{ {
int danceCount = 0; int danceCount = 0;
for (Effect effect : _effects)
final Effect[] effects = getAllEffects();
for (Effect e : effects)
{ {
if (e == null) if (effect.getSkill().isDance() && effect.getInUse())
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (e.getSkill().isDance() && e.getInUse())
{ {
danceCount++; danceCount++;
} }
} }
return danceCount; return danceCount;
} }
@@ -7084,19 +6925,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return false; return false;
} }
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect e : effects)
{ {
if (e == null) if ((effect.getStackType() != null) && effect.getStackType().equals(stackType))
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if ((e.getStackType() != null) && e.getStackType().equals(stackType))
{ {
return true; return true;
} }

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -529,13 +530,12 @@ public class CubicInstance
Skill skill = null; Skill skill = null;
if ((_id >= SMART_CUBIC_EVATEMPLAR) && (_id <= SMART_CUBIC_SPECTRALMASTER)) if ((_id >= SMART_CUBIC_EVATEMPLAR) && (_id <= SMART_CUBIC_SPECTRALMASTER))
{ {
final Effect[] effects = owner.getAllEffects(); for (Effect effect : owner.getAllEffects())
for (Effect e : effects)
{ {
if ((e != null) && e.getSkill().isOffensive()) if (effect.getSkill().isOffensive())
{ {
useCubicCure = true; useCubicCure = true;
e.exit(true); effect.exit(true);
} }
} }
} }
@@ -730,8 +730,8 @@ public class CubicInstance
} }
case CANCEL: case CANCEL:
{ {
final Effect[] effects = target.getAllEffects(); final Collection<Effect> effects = target.getAllEffects();
if ((effects == null) || (effects.length == 0)) if (effects.isEmpty())
{ {
break; break;
} }

View File

@@ -8661,7 +8661,7 @@ public class PlayerInstance extends Playable
statement.close(); statement.close();
// Store all effect data along with calulated remaining reuse delays for matching skills. 'restore_type'= 0. // Store all effect data along with calulated remaining reuse delays for matching skills. 'restore_type'= 0.
final Effect[] effects = getAllEffects(); final Collection<Effect> effects = getAllEffects();
statement = con.prepareStatement(ADD_SKILL_SAVE); statement = con.prepareStatement(ADD_SKILL_SAVE);
int buffIndex = 0; int buffIndex = 0;
final List<Integer> storedSkills = new ArrayList<>(); final List<Integer> storedSkills = new ArrayList<>();
@@ -14139,7 +14139,7 @@ public class PlayerInstance extends Playable
private int getRandomFishLvl() private int getRandomFishLvl()
{ {
final Effect[] effects = getAllEffects(); final Collection<Effect> effects = getAllEffects();
int skillLevel = getSkillLevel(1315); int skillLevel = getSkillLevel(1315);
for (Effect e : effects) for (Effect e : effects)
{ {

View File

@@ -44,15 +44,14 @@ final class EffectCancel extends Effect
final int landrate = (int) getEffector().calcStat(Stat.CANCEL_VULN, 90, getEffected(), null); final int landrate = (int) getEffector().calcStat(Stat.CANCEL_VULN, 90, getEffected(), null);
if (Rnd.get(100) < landrate) if (Rnd.get(100) < landrate)
{ {
final Effect[] effects = getEffected().getAllEffects();
int maxdisp = (int) getSkill().getNegatePower(); int maxdisp = (int) getSkill().getNegatePower();
if (maxdisp == 0) if (maxdisp == 0)
{ {
maxdisp = 5; maxdisp = 5;
} }
for (Effect e : effects) for (Effect effect : getEffected().getAllEffects())
{ {
switch (e.getEffectType()) switch (effect.getEffectType())
{ {
case SIGNET_GROUND: case SIGNET_GROUND:
case SIGNET_EFFECT: case SIGNET_EFFECT:
@@ -61,13 +60,13 @@ final class EffectCancel extends Effect
} }
} }
if ((e.getSkill().getId() != 4082) && (e.getSkill().getId() != 4215) && (e.getSkill().getId() != 5182) && (e.getSkill().getId() != 4515) && (e.getSkill().getId() != 110) && (e.getSkill().getId() != 111) && (e.getSkill().getId() != 1323) && (e.getSkill().getId() != 1325) && (e.getSkill().getSkillType() == SkillType.BUFF)) if ((effect.getSkill().getId() != 4082) && (effect.getSkill().getId() != 4215) && (effect.getSkill().getId() != 5182) && (effect.getSkill().getId() != 4515) && (effect.getSkill().getId() != 110) && (effect.getSkill().getId() != 111) && (effect.getSkill().getId() != 1323) && (effect.getSkill().getId() != 1325) && (effect.getSkill().getSkillType() == SkillType.BUFF))
{ {
// TODO Fix cancel debuffs // TODO Fix cancel debuffs
if (e.getSkill().getSkillType() != SkillType.DEBUFF) if (effect.getSkill().getSkillType() != SkillType.DEBUFF)
{ {
int rate = 100; int rate = 100;
final int level = e.getLevel(); final int level = effect.getLevel();
if (level > 0) if (level > 0)
{ {
rate = 150 / (1 + level); rate = 150 / (1 + level);
@@ -84,7 +83,7 @@ final class EffectCancel extends Effect
if (Rnd.get(100) < rate) if (Rnd.get(100) < rate)
{ {
e.exit(true); effect.exit(true);
maxdisp--; maxdisp--;
if (maxdisp == 0) if (maxdisp == 0)
{ {

View File

@@ -57,17 +57,12 @@ public class EffectSignetNoise extends Effect
continue; continue;
} }
final Effect[] effects = target.getAllEffects(); for (Effect effect : target.getAllEffects())
if (effects != null)
{ {
for (Effect effect : effects) if (effect.getSkill().isDance())
{ {
if (effect.getSkill().isDance()) effect.exit(true);
{
effect.exit(true);
}
} }
// there doesn't seem to be a visible effect?
} }
} }
return true; return true;

View File

@@ -59,8 +59,7 @@ public class SkillSeed extends Skill
oldEffect.increasePower(); oldEffect.increasePower();
} }
final Effect[] effects = target.getAllEffects(); for (Effect effect : target.getAllEffects())
for (Effect effect : effects)
{ {
if (effect.getEffectType() == Effect.EffectType.SEED) if (effect.getEffectType() == Effect.EffectType.SEED)
{ {

View File

@@ -191,21 +191,17 @@ public class EnterWorld implements IClientIncomingPacket
player.restoreEffects(); player.restoreEffects();
} }
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
if (effects != null)
{ {
for (Effect e : effects) if (effect.getEffectType() == Effect.EffectType.HEAL_OVER_TIME)
{ {
if (e.getEffectType() == Effect.EffectType.HEAL_OVER_TIME) player.stopEffects(Effect.EffectType.HEAL_OVER_TIME);
{ player.removeEffect(effect);
player.stopEffects(Effect.EffectType.HEAL_OVER_TIME); }
player.removeEffect(e); if (effect.getEffectType() == Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME)
} {
if (e.getEffectType() == Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME) player.stopEffects(Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME);
{ player.removeEffect(effect);
player.stopEffects(Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME);
player.removeEffect(e);
}
} }
} }

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import java.util.Collection;
import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -24,16 +26,12 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
public class GMViewSkillInfo implements IClientOutgoingPacket public class GMViewSkillInfo implements IClientOutgoingPacket
{ {
private final PlayerInstance _player; private final PlayerInstance _player;
private Skill[] _skills; private final Collection<Skill> _skills;
public GMViewSkillInfo(PlayerInstance player) public GMViewSkillInfo(PlayerInstance player)
{ {
_player = player; _player = player;
_skills = _player.getAllSkills(); _skills = _player.getAllSkills();
if (_skills.length == 0)
{
_skills = new Skill[0];
}
} }
@Override @Override
@@ -41,8 +39,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket
{ {
OutgoingPackets.GM_VIEW_SKILL_INFO.writeId(packet); OutgoingPackets.GM_VIEW_SKILL_INFO.writeId(packet);
packet.writeS(_player.getName()); packet.writeS(_player.getName());
packet.writeD(_skills.length); packet.writeD(_skills.size());
for (Skill skill : _skills) for (Skill skill : _skills)
{ {
packet.writeD(skill.isPassive() ? 1 : 0); packet.writeD(skill.isPassive() ? 1 : 0);

View File

@@ -385,15 +385,11 @@ public class Baium extends Quest
if (attacker.getMountType() == 1) if (attacker.getMountType() == 1)
{ {
int sk4258 = 0; int sk4258 = 0;
final Effect[] effects = attacker.getAllEffects(); for (Effect e : attacker.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4258)
{ {
if (e.getSkill().getId() == 4258) sk4258 = 1;
{
sk4258 = 1;
}
} }
} }
if (sk4258 == 0) if (sk4258 == 0)

View File

@@ -158,17 +158,13 @@ public class Valakas extends Quest
{ {
int level = 0; int level = 0;
int sk4691 = 0; int sk4691 = 0;
final Effect[] effects = npc.getAllEffects(); for (Effect e : npc.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4629)
{ {
if (e.getSkill().getId() == 4629) sk4691 = 1;
{ level = e.getSkill().getLevel();
sk4691 = 1; break;
level = e.getSkill().getLevel();
break;
}
} }
} }
@@ -376,15 +372,11 @@ public class Valakas extends Quest
if (attacker.getMountType() == 1) if (attacker.getMountType() == 1)
{ {
int sk4258 = 0; int sk4258 = 0;
final Effect[] effects = attacker.getAllEffects(); for (Effect e : attacker.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4258)
{ {
if (e.getSkill().getId() == 4258) sk4258 = 1;
{
sk4258 = 1;
}
} }
} }
if (sk4258 == 0) if (sk4258 == 0)

View File

@@ -212,19 +212,15 @@ public class Zaken extends Quest
} }
int sk4223 = 0; int sk4223 = 0;
int sk4227 = 0; int sk4227 = 0;
final Effect[] effects = npc.getAllEffects(); for (Effect e : npc.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4227)
{ {
if (e.getSkill().getId() == 4227) sk4227 = 1;
{ }
sk4227 = 1; if (e.getSkill().getId() == 4223)
} {
if (e.getSkill().getId() == 4223) sk4223 = 1;
{
sk4223 = 1;
}
} }
} }
if (getTimeHour() < 5) if (getTimeHour() < 5)
@@ -754,15 +750,11 @@ public class Zaken extends Quest
if (attacker.getMountType() == 1) if (attacker.getMountType() == 1)
{ {
int sk4258 = 0; int sk4258 = 0;
final Effect[] effects = attacker.getAllEffects(); for (Effect e : attacker.getAllEffects())
if ((effects != null) && (effects.length != 0))
{ {
for (Effect e : effects) if (e.getSkill().getId() == 4258)
{ {
if (e.getSkill().getId() == 4258) sk4258 = 1;
{
sk4258 = 1;
}
} }
} }
if (sk4258 == 0) if (sk4258 == 0)

View File

@@ -20,6 +20,8 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.Collection;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.GameTimeController; import org.l2jmobius.gameserver.GameTimeController;
@@ -749,7 +751,7 @@ public class AttackableAI extends CreatureAI
} }
// Get all information needed to chose between physical or magical attack // Get all information needed to chose between physical or magical attack
Skill[] skills = null; Collection<Skill> skills = null;
double dist2 = 0; double dist2 = 0;
int range = 0; int range = 0;
@@ -902,10 +904,8 @@ public class AttackableAI extends CreatureAI
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;
@@ -963,10 +963,8 @@ public class AttackableAI extends CreatureAI
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;

View File

@@ -20,6 +20,7 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.commons.util.Rnd;
@@ -188,14 +189,13 @@ public class ControllableMobAI extends AttackableAI
final ControllableMobAI ctrlAi = (ControllableMobAI) theTarget.getAI(); final ControllableMobAI ctrlAi = (ControllableMobAI) theTarget.getAI();
ctrlAi.forceAttack(_actor); ctrlAi.forceAttack(_actor);
final Skill[] skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(target); final double dist2 = _actor.calculateDistanceSq2D(target);
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + target.getTemplate().getCollisionRadius(); final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + target.getTemplate().getCollisionRadius();
int maxRange = range; int maxRange = range;
if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20)))) if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20))))
{ {
// check distant skills // check distant skills
for (Skill sk : skills) for (Skill sk : _actor.getAllSkills())
{ {
final int castRange = sk.getCastRange(); final int castRange = sk.getCastRange();
if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk))) if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk)))
@@ -225,14 +225,13 @@ public class ControllableMobAI extends AttackableAI
} }
_actor.setTarget(getForcedTarget()); _actor.setTarget(getForcedTarget());
final Skill[] skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(getForcedTarget()); final double dist2 = _actor.calculateDistanceSq2D(getForcedTarget());
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getForcedTarget().getTemplate().getCollisionRadius(); final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getForcedTarget().getTemplate().getCollisionRadius();
int maxRange = range; int maxRange = range;
if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20)))) if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20))))
{ {
// check distant skills // check distant skills
for (Skill sk : skills) for (Skill sk : _actor.getAllSkills())
{ {
final int castRange = sk.getCastRange(); final int castRange = sk.getCastRange();
if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk))) if (((castRange * castRange) >= dist2) && !_actor.isSkillDisabled(sk) && (_actor.getCurrentMp() > _actor.getStat().getMpConsume(sk)))
@@ -292,7 +291,7 @@ public class ControllableMobAI extends AttackableAI
} }
_actor.setTarget(getAttackTarget()); _actor.setTarget(getAttackTarget());
final Skill[] skills = _actor.getAllSkills(); final Collection<Skill> skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(getAttackTarget()); final double dist2 = _actor.calculateDistanceSq2D(getAttackTarget());
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius(); final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
int maxRange = range; int maxRange = range;
@@ -335,7 +334,7 @@ public class ControllableMobAI extends AttackableAI
setAttackTarget(hated); setAttackTarget(hated);
} }
if (!_actor.isMuted() && (skills.length > 0) && (Rnd.get(5) == 3)) if (!_actor.isMuted() && (!skills.isEmpty()) && (Rnd.get(5) == 3))
{ {
for (Skill sk : skills) for (Skill sk : skills)
{ {

View File

@@ -21,6 +21,7 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -585,7 +586,7 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
private void attackPrepare() private void attackPrepare()
{ {
// Get all information needed to choose between physical or magical attack // Get all information needed to choose between physical or magical attack
Skill[] skills = null; Collection<Skill> skills = null;
double dist2 = 0; double dist2 = 0;
int range = 0; int range = 0;
FortSiegeGuardInstance sGuard; FortSiegeGuardInstance sGuard;
@@ -650,10 +651,8 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
} }
if (sk.getSkillType() == SkillType.BUFF) if (sk.getSkillType() == SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;
@@ -788,10 +787,8 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
} }
if (sk.getSkillType() == SkillType.BUFF) if (sk.getSkillType() == SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;

View File

@@ -20,6 +20,7 @@ import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import static org.l2jmobius.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
import java.util.Collection;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -307,7 +308,7 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
private void attackPrepare() private void attackPrepare()
{ {
// Get all information needed to chose between physical or magical attack // Get all information needed to chose between physical or magical attack
Skill[] skills = null; Collection<Skill> skills = null;
double dist2 = 0; double dist2 = 0;
int range = 0; int range = 0;
final SiegeGuardInstance sGuard = (SiegeGuardInstance) _actor; final SiegeGuardInstance sGuard = (SiegeGuardInstance) _actor;
@@ -368,10 +369,8 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
} }
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;
@@ -485,10 +484,8 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
if (sk.getSkillType() == Skill.SkillType.BUFF) if (sk.getSkillType() == Skill.SkillType.BUFF)
{ {
final Effect[] effects = _actor.getAllEffects(); for (Effect effect : _actor.getAllEffects())
for (int i = 0; (effects != null) && (i < effects.length); i++)
{ {
final Effect effect = effects[i];
if (effect.getSkill() == sk) if (effect.getSkill() == sk)
{ {
useSkillSelf = false; useSkillSelf = false;

View File

@@ -342,7 +342,7 @@ public class SkillTreeTable
skills.addAll(_expandDwarfCraftSkillTrees); skills.addAll(_expandDwarfCraftSkillTrees);
} }
final Skill[] oldSkills = player.getAllSkills(); final Skill[] oldSkills = player.getAllSkills().toArray(new Skill[0]);
for (SkillLearn temp : skills) for (SkillLearn temp : skills)
{ {
if (temp.getMinLevel() <= player.getLevel()) if (temp.getMinLevel() <= player.getLevel())
@@ -378,7 +378,7 @@ public class SkillTreeTable
final List<EnchantSkillLearn> skills = new ArrayList<>(); final List<EnchantSkillLearn> skills = new ArrayList<>();
skills.addAll(_enchantSkillTrees); skills.addAll(_enchantSkillTrees);
final Skill[] oldSkills = player.getAllSkills(); final Skill[] oldSkills = player.getAllSkills().toArray(new Skill[0]);
if (player.getLevel() < 76) if (player.getLevel() < 76)
{ {
return result.toArray(new EnchantSkillLearn[result.size()]); return result.toArray(new EnchantSkillLearn[result.size()]);

View File

@@ -178,7 +178,7 @@ public class AdminBuffs implements IAdminCommandHandler
html.append("<table>"); html.append("<table>");
html.append("<tr><td width=200>Skill</td><td width=70>Action</td></tr>"); html.append("<tr><td width=200>Skill</td><td width=70>Action</td></tr>");
final Effect[] effects = player.getAllEffects(); final Effect[] effects = player.getAllEffects().toArray(new Effect[0]);
for (Effect e : effects) for (Effect e : effects)
{ {
if (e != null) if (e != null)
@@ -202,7 +202,7 @@ public class AdminBuffs implements IAdminCommandHandler
final PlayerInstance player = World.getInstance().getPlayer(playername); final PlayerInstance player = World.getInstance().getPlayer(playername);
if ((player != null) && (SkillId > 0)) if ((player != null) && (SkillId > 0))
{ {
final Effect[] effects = player.getAllEffects(); final Effect[] effects = player.getAllEffects().toArray(new Effect[0]);
for (Effect e : effects) for (Effect e : effects)
{ {
if ((e != null) && (e.getSkill().getId() == SkillId)) if ((e != null) && (e.getSkill().getId() == SkillId))

View File

@@ -247,7 +247,7 @@ public class AdminSkill implements IAdminCommandHandler
return; return;
} }
final Skill[] skills = player.getAllSkills(); final Skill[] skills = player.getAllSkills().toArray(new Skill[0]);
final int maxSkillsPerPage = 10; final int maxSkillsPerPage = 10;
int maxPages = skills.length / maxSkillsPerPage; int maxPages = skills.length / maxSkillsPerPage;
if (skills.length > (maxSkillsPerPage * maxPages)) if (skills.length > (maxSkillsPerPage * maxPages))
@@ -353,8 +353,8 @@ public class AdminSkill implements IAdminCommandHandler
} }
else else
{ {
final Skill[] skills = player.getAllSkills(); final Skill[] skills = player.getAllSkills().toArray(new Skill[0]);
adminSkills = activeChar.getAllSkills(); adminSkills = activeChar.getAllSkills().toArray(new Skill[0]);
for (Skill adminSkill : adminSkills) for (Skill adminSkill : adminSkills)
{ {
activeChar.removeSkill(adminSkill); activeChar.removeSkill(adminSkill);
@@ -392,15 +392,16 @@ public class AdminSkill implements IAdminCommandHandler
} }
else else
{ {
final Skill[] skills = player.getAllSkills(); final Skill[] skills = player.getAllSkills().toArray(new Skill[0]);
for (Skill skill : skills) for (Skill skill : skills)
{ {
player.removeSkill(skill); player.removeSkill(skill);
} }
for (int i = 0; i < activeChar.getAllSkills().length; i++) final Skill[] skills2 = activeChar.getAllSkills().toArray(new Skill[0]);
for (Skill skill : skills2)
{ {
player.addSkill(activeChar.getAllSkills()[i], true); player.addSkill(skill, true);
} }
for (Skill skill : skills) for (Skill skill : skills)

View File

@@ -740,19 +740,13 @@ public class Potions implements IItemHandler
private boolean isEffectReplaceable(Playable activeChar, Enum<EffectType> effectType, int itemId) private boolean isEffectReplaceable(Playable activeChar, Enum<EffectType> effectType, int itemId)
{ {
final Effect[] effects = activeChar.getAllEffects(); for (Effect effect : activeChar.getAllEffects())
if (effects == null)
{ {
return true; if ((effect.getEffectType() == effectType) && effect.getSkill().isPotion())
}
for (Effect e : effects)
{
if ((e.getEffectType() == effectType) && e.getSkill().isPotion())
{ {
// One can reuse pots after 2/3 of their duration is over. // One can reuse pots after 2/3 of their duration is over.
// It would be faster to check if its > 10 but that would screw custom pot durations... // It would be faster to check if its > 10 but that would screw custom pot durations...
if (e.getTaskTime() > ((e.getSkill().getBuffDuration() * 67) / 100000)) if (effect.getTaskTime() > ((effect.getSkill().getBuffDuration() * 67) / 100000))
{ {
return true; return true;
} }

View File

@@ -63,12 +63,11 @@ public class Remedy implements IItemHandler
final int itemId = item.getItemId(); final int itemId = item.getItemId();
if (itemId == 1831) // antidote if (itemId == 1831) // antidote
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.POISON) && (e.getSkill().getLevel() <= 3)) if ((effect.getSkill().getSkillType() == Skill.SkillType.POISON) && (effect.getSkill().getLevel() <= 3))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -79,12 +78,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 1832) // advanced antidote else if (itemId == 1832) // advanced antidote
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.POISON) && (e.getSkill().getLevel() <= 7)) if ((effect.getSkill().getSkillType() == Skill.SkillType.POISON) && (effect.getSkill().getLevel() <= 7))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -95,12 +93,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 1833) // bandage else if (itemId == 1833) // bandage
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.BLEED) && (e.getSkill().getLevel() <= 3)) if ((effect.getSkill().getSkillType() == Skill.SkillType.BLEED) && (effect.getSkill().getLevel() <= 3))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -111,12 +108,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 1834) // emergency dressing else if (itemId == 1834) // emergency dressing
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if ((e.getSkill().getSkillType() == Skill.SkillType.BLEED) && (e.getSkill().getLevel() <= 7)) if ((effect.getSkill().getSkillType() == Skill.SkillType.BLEED) && (effect.getSkill().getLevel() <= 7))
{ {
e.exit(true); effect.exit(true);
break; break;
} }
} }
@@ -127,12 +123,11 @@ public class Remedy implements IItemHandler
} }
else if (itemId == 3889) // potion of recovery else if (itemId == 3889) // potion of recovery
{ {
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
for (Effect e : effects)
{ {
if (e.getSkill().getId() == 4082) if (effect.getSkill().getId() == 4082)
{ {
e.exit(true); effect.exit(true);
} }
} }

View File

@@ -206,16 +206,12 @@ public class Continuous implements ISkillHandler
{ {
boolean stopped = false; boolean stopped = false;
final Effect[] effects = target.getAllEffects(); for (Effect e : target.getAllEffects())
if (effects != null)
{ {
for (Effect e : effects) if ((e != null) && (e.getSkill().getId() == skill.getId()))
{ {
if ((e != null) && (e.getSkill().getId() == skill.getId())) e.exit(false);
{ stopped = true;
e.exit(false);
stopped = true;
}
} }
} }

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.handler.skillhandlers; package org.l2jmobius.gameserver.handler.skillhandlers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -201,12 +202,11 @@ public class Disablers implements ISkillHandler
// do nothing if not on mob // do nothing if not on mob
if (Formulas.getInstance().calcSkillSuccess(creature, target, skill, ss, sps, bss)) if (Formulas.getInstance().calcSkillSuccess(creature, target, skill, ss, sps, bss))
{ {
final Effect[] effects = target.getAllEffects(); for (Effect effect : target.getAllEffects())
for (Effect e : effects)
{ {
if (e.getSkill().getSkillType() == type) if (effect.getSkill().getSkillType() == type)
{ {
e.exit(false); effect.exit(false);
} }
} }
skill.applyEffects(creature, target, ss, sps, bss); skill.applyEffects(creature, target, ss, sps, bss);
@@ -364,12 +364,11 @@ public class Disablers implements ISkillHandler
{ {
continue; continue;
} }
final Effect[] effects = target1.getAllEffects(); for (Effect effect : target1.getAllEffects())
for (Effect e : effects)
{ {
if (e.getStackType().equals("mAtkSpeedUp") || e.getStackType().equals("mAtk") || (e.getSkill().getId() == 1059) || (e.getSkill().getId() == 1085) || (e.getSkill().getId() == 4356) || (e.getSkill().getId() == 4355)) if (effect.getStackType().equals("mAtkSpeedUp") || effect.getStackType().equals("mAtk") || (effect.getSkill().getId() == 1059) || (effect.getSkill().getId() == 1085) || (effect.getSkill().getId() == 4356) || (effect.getSkill().getId() == 4355))
{ {
e.exit(); effect.exit();
} }
} }
} }
@@ -388,12 +387,11 @@ public class Disablers implements ISkillHandler
{ {
continue; continue;
} }
final Effect[] effects = target1.getAllEffects(); for (Effect effect : target1.getAllEffects())
for (Effect e : effects)
{ {
if (e.getStackType().equals("SpeedUp") || e.getStackType().equals("pAtkSpeedUp") || (e.getSkill().getId() == 1204) || (e.getSkill().getId() == 1086) || (e.getSkill().getId() == 4342) || (e.getSkill().getId() == 4357)) if (effect.getStackType().equals("SpeedUp") || effect.getStackType().equals("pAtkSpeedUp") || (effect.getSkill().getId() == 1204) || (effect.getSkill().getId() == 1086) || (effect.getSkill().getId() == 4342) || (effect.getSkill().getId() == 4357))
{ {
e.exit(); effect.exit();
} }
} }
} }
@@ -445,7 +443,7 @@ public class Disablers implements ISkillHandler
landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null); landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null);
if (Rnd.get(100) < landrate) if (Rnd.get(100) < landrate)
{ {
final Effect[] effects = target.getAllEffects(); final Collection<Effect> effects = target.getAllEffects();
int maxfive = 5; int maxfive = 5;
for (Effect e : effects) for (Effect e : effects)
{ {
@@ -523,15 +521,14 @@ public class Disablers implements ISkillHandler
landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null); landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null);
if (Rnd.get(100) < landrate) if (Rnd.get(100) < landrate)
{ {
final Effect[] effects = target.getAllEffects();
int maxdisp = (int) skill.getNegatePower(); int maxdisp = (int) skill.getNegatePower();
if (maxdisp == 0) if (maxdisp == 0)
{ {
maxdisp = Config.BUFFS_MAX_AMOUNT + Config.DEBUFFS_MAX_AMOUNT + 6; maxdisp = Config.BUFFS_MAX_AMOUNT + Config.DEBUFFS_MAX_AMOUNT + 6;
} }
for (Effect e : effects) for (Effect effect : target.getAllEffects())
{ {
switch (e.getEffectType()) switch (effect.getEffectType())
{ {
case SIGNET_GROUND: case SIGNET_GROUND:
case SIGNET_EFFECT: case SIGNET_EFFECT:
@@ -540,10 +537,10 @@ public class Disablers implements ISkillHandler
} }
} }
if ((e.getSkill().getId() != 4082) && (e.getSkill().getId() != 4215) && (e.getSkill().getId() != 5182) && (e.getSkill().getId() != 4515) && (e.getSkill().getId() != 110) && (e.getSkill().getId() != 111) && (e.getSkill().getId() != 1323) && (e.getSkill().getId() != 1325) && (e.getSkill().getSkillType() == SkillType.BUFF)) if ((effect.getSkill().getId() != 4082) && (effect.getSkill().getId() != 4215) && (effect.getSkill().getId() != 5182) && (effect.getSkill().getId() != 4515) && (effect.getSkill().getId() != 110) && (effect.getSkill().getId() != 111) && (effect.getSkill().getId() != 1323) && (effect.getSkill().getId() != 1325) && (effect.getSkill().getSkillType() == SkillType.BUFF))
{ {
int rate = 100; int rate = 100;
final int level = e.getLevel(); final int level = effect.getLevel();
if (level > 0) if (level > 0)
{ {
rate = 150 / (1 + level); rate = 150 / (1 + level);
@@ -560,7 +557,7 @@ public class Disablers implements ISkillHandler
if (Rnd.get(100) < rate) if (Rnd.get(100) < rate)
{ {
e.exit(true); effect.exit(true);
maxdisp--; maxdisp--;
if (maxdisp == 0) if (maxdisp == 0)
{ {
@@ -764,8 +761,7 @@ public class Disablers implements ISkillHandler
private void negateEffect(Creature target, SkillType type, double power, int skillId) private void negateEffect(Creature target, SkillType type, double power, int skillId)
{ {
final Effect[] effects = target.getAllEffects(); for (Effect e : target.getAllEffects())
for (Effect e : effects)
{ {
if (((e.getSkill() != null) && (e.getSkill().getId() == 4215)) || (e.getSkill().getId() == 4515)) if (((e.getSkill() != null) && (e.getSkill().getId() == 4215)) || (e.getSkill().getId() == 4515))
{ {

View File

@@ -222,8 +222,7 @@ public class Augmentation
if ((_skill.isPassive() && Config.DELETE_AUGM_PASSIVE_ON_CHANGE) || (_skill.isActive() && Config.DELETE_AUGM_ACTIVE_ON_CHANGE)) if ((_skill.isPassive() && Config.DELETE_AUGM_PASSIVE_ON_CHANGE) || (_skill.isActive() && Config.DELETE_AUGM_ACTIVE_ON_CHANGE))
{ {
// Iterate through all effects currently on the character. // Iterate through all effects currently on the character.
final Effect[] effects = player.getAllEffects(); for (Effect currenteffect : player.getAllEffects())
for (Effect currenteffect : effects)
{ {
final Skill effectSkill = currenteffect.getSkill(); final Skill effectSkill = currenteffect.getSkill();
if (effectSkill.getId() == _skill.getId()) if (effectSkill.getId() == _skill.getId())

View File

@@ -3011,9 +3011,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
private int _AbnormalEffects; private int _AbnormalEffects;
/** /**
* FastTable containing all active skills effects in progress of a Creature. * Set containing all active skills effects in progress of a Creature.
*/ */
private final List<Effect> _effects = new ArrayList<>(); private final Set<Effect> _effects = ConcurrentHashMap.newKeySet();
/** The table containing the List of all stacked effect in progress for each Stack group Identifier. */ /** The table containing the List of all stacked effect in progress for each Stack group Identifier. */
protected Map<String, List<Effect>> _stackedEffects = new HashMap<>(); protected Map<String, List<Effect>> _stackedEffects = new HashMap<>();
@@ -3069,20 +3069,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return; return;
} }
final Effect[] effects = getAllEffects();
// Make sure there's no same effect previously // Make sure there's no same effect previously
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if ((effect.getSkill().getId() == newEffect.getSkill().getId()) && (effect.getEffectType() == newEffect.getEffectType()) && (effect.getStackType().equals(newEffect.getStackType()))) if ((effect.getSkill().getId() == newEffect.getSkill().getId()) && (effect.getEffectType() == newEffect.getEffectType()) && (effect.getStackType().equals(newEffect.getStackType())))
{ {
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
@@ -3125,41 +3114,31 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
removeFirstDeBuff(tempskill.getId()); removeFirstDeBuff(tempskill.getId());
} }
synchronized (_effects) // Add the Effect to all effect in progress on the Creature
{ // if (!newEffect.getSkill().isToggle())
// Add the Effect to all effect in progress on the Creature // {
if (!newEffect.getSkill().isToggle()) // int pos = 0;
{ // for (int i = 0; i < _effects.size(); i++)
int pos = 0; // {
for (int i = 0; i < _effects.size(); i++) // if (_effects.get(i) != null)
{ // {
if (_effects.get(i) == null) // final int skillId = _effects.get(i).getSkill().getId();
{ // if (!_effects.get(i).getSkill().isToggle() && ((skillId <= 4360) || (skillId >= 4367)))
_effects.remove(i); // {
i--; // pos++;
continue; // }
} // }
// else
if (_effects.get(i) != null) // {
{ // break;
final int skillId = _effects.get(i).getSkill().getId(); // }
if (!_effects.get(i).getSkill().isToggle() && ((skillId <= 4360) || (skillId >= 4367))) // }
{ // _effects.add(pos, newEffect);
pos++; // }
} // else
} // {
else _effects.add(newEffect);
{ // }
break;
}
}
_effects.add(pos, newEffect);
}
else
{
_effects.add(newEffect);
}
}
// Check if a stack group is defined for this effect // Check if a stack group is defined for this effect
if (newEffect.getStackType().equals("none")) if (newEffect.getStackType().equals("none"))
@@ -3249,11 +3228,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
// skill.exit() could be used, if the users don't wish to see "effect removed" always when a timer goes off, even if the buff isn't active any more (has been replaced). but then check e.g. npc hold and raid petrify. // skill.exit() could be used, if the users don't wish to see "effect removed" always when a timer goes off, even if the buff isn't active any more (has been replaced). but then check e.g. npc hold and raid petrify.
if (Config.EFFECT_CANCELING && !newStackedEffect.isHerbEffect() && (stackQueue.size() > 1)) if (Config.EFFECT_CANCELING && !newStackedEffect.isHerbEffect() && (stackQueue.size() > 1))
{ {
synchronized (_effects) _effects.remove(stackQueue.get(1));
{
_effects.remove(stackQueue.get(1));
}
stackQueue.remove(1); stackQueue.remove(1);
} }
@@ -3336,11 +3311,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
} }
synchronized (_effects) // Remove the active skill L2effect from _effects of the Creature
{ _effects.remove(effect);
// Remove the active skill L2effect from _effects of the Creature
_effects.remove(effect);
}
// Update active skills in progress (In Use and Not In Use because stacked) icones on client // Update active skills in progress (In Use and Not In Use because stacked) icones on client
updateEffectIcons(); updateEffectIcons();
@@ -3510,20 +3482,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopAllEffects() public void stopAllEffects()
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if (effect != null) effect.exit(true);
{
effect.exit(true);
}
else
{
synchronized (_effects)
{
_effects.remove(effect);
}
}
} }
if (this instanceof PlayerInstance) if (this instanceof PlayerInstance)
@@ -3595,15 +3556,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopSkillEffects(int skillId) public void stopSkillEffects(int skillId)
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if ((effect == null) || (effect.getSkill() == null)) if (effect.getSkill() == null)
{ {
synchronized (_effects) _effects.remove(effect);
{
_effects.remove(effect);
}
continue; continue;
} }
@@ -3629,18 +3586,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopEffects(Effect.EffectType type) public void stopEffects(Effect.EffectType type)
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getEffectType() == type) if (effect.getEffectType() == type)
{ {
effect.exit(true); effect.exit(true);
@@ -3659,15 +3606,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void stopSkillEffects(SkillType skillType, double power) public void stopSkillEffects(SkillType skillType, double power)
{ {
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect effect : effects)
{ {
if ((effect == null) || (effect.getSkill() == null)) if (effect.getSkill() == null)
{ {
synchronized (_effects) _effects.remove(effect);
{
_effects.remove(effect);
}
continue; continue;
} }
@@ -3949,38 +3892,34 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
// Go through all effects if any // Go through all effects if any
synchronized (_effects) for (Effect effect : _effects)
{ {
for (int i = 0; i < _effects.size(); i++) if (effect.getSkill() == null)
{ {
if ((_effects.get(i) == null) || (_effects.get(i).getSkill() == null)) _effects.remove(effect);
continue;
}
if ((effect.getEffectType() == Effect.EffectType.CHARGE) && (player != null))
{
// handled by EtcStatusUpdate
continue;
}
if (effect.getInUse())
{
if (mi != null)
{ {
_effects.remove(i); effect.addIcon(mi);
i--;
continue;
} }
// Like L2OFF toggle and healing potions must not be showed on party buff list
if ((_effects.get(i).getEffectType() == Effect.EffectType.CHARGE) && (player != null)) if ((ps != null) && !effect.getSkill().isToggle() && (effect.getSkill().getId() != 2031) && (effect.getSkill().getId() != 2037) && (effect.getSkill().getId() != 2032))
{ {
// handled by EtcStatusUpdate effect.addPartySpelledIcon(ps);
continue;
} }
if (os != null)
if (_effects.get(i).getInUse())
{ {
if (mi != null) effect.addOlympiadSpelledIcon(os);
{
_effects.get(i).addIcon(mi);
}
// Like L2OFF toggle and healing potions must not be showed on party buff list
if ((ps != null) && !_effects.get(i).getSkill().isToggle() && (_effects.get(i).getSkill().getId() != 2031) && (_effects.get(i).getSkill().getId() != 2037) && (_effects.get(i).getSkill().getId() != 2032))
{
_effects.get(i).addPartySpelledIcon(ps);
}
if (os != null)
{
_effects.get(i).addOlympiadSpelledIcon(os);
}
} }
} }
} }
@@ -4072,12 +4011,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* All active skills effects in progress on the Creature are identified in <b>_effects</b>. The Integer key of _effects is the Skill Identifier that has created the effect. * All active skills effects in progress on the Creature are identified in <b>_effects</b>. The Integer key of _effects is the Skill Identifier that has created the effect.
* @return A table containing all active skills effect in progress on the Creature * @return A table containing all active skills effect in progress on the Creature
*/ */
public Effect[] getAllEffects() public Collection<Effect> getAllEffects()
{ {
synchronized (_effects) return _effects;
{
return _effects.toArray(new Effect[_effects.size()]);
}
} }
/** /**
@@ -4091,19 +4027,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(int index) public Effect getFirstEffect(int index)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getSkill().getId() == index) if (effect.getSkill().getId() == index)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -4128,19 +4054,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(SkillType type) public Effect getFirstEffect(SkillType type)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getSkill().getSkillType() == type) if (effect.getSkill().getSkillType() == type)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -4154,7 +4070,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
} }
} }
} }
return effNotInUse; return effNotInUse;
} }
@@ -4169,19 +4084,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(Skill skill) public Effect getFirstEffect(Skill skill)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getSkill() == skill) if (effect.getSkill() == skill)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -4210,19 +4115,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public Effect getFirstEffect(Effect.EffectType tp) public Effect getFirstEffect(Effect.EffectType tp)
{ {
final Effect[] effects = getAllEffects();
Effect effNotInUse = null; Effect effNotInUse = null;
for (Effect effect : effects) for (Effect effect : _effects)
{ {
if (effect == null)
{
synchronized (_effects)
{
_effects.remove(effect);
}
continue;
}
if (effect.getEffectType() == tp) if (effect.getEffectType() == tp)
{ {
if (effect.getInUse()) if (effect.getInUse())
@@ -6884,9 +6779,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
* All skills own by a Creature are identified in <b>_skills</b> the Creature * All skills own by a Creature are identified in <b>_skills</b> the Creature
* @return the all skills * @return the all skills
*/ */
public Skill[] getAllSkills() public Collection<Skill> getAllSkills()
{ {
return _skills.values().toArray(new Skill[_skills.values().size()]); return _skills.values();
} }
/** /**
@@ -6936,25 +6831,14 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public int getBuffCount() public int getBuffCount()
{ {
final Effect[] effects = getAllEffects();
int numBuffs = 0; int numBuffs = 0;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null) if (((effect.getSkill().getSkillType() == SkillType.BUFF) || (effect.getSkill().getId() == 1416) || (effect.getSkill().getSkillType() == SkillType.REFLECT) || (effect.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (effect.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((effect.getSkill().getId() <= 4360) || (effect.getSkill().getId() >= 4367))) // 7s
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (((e.getSkill().getSkillType() == SkillType.BUFF) || (e.getSkill().getId() == 1416) || (e.getSkill().getSkillType() == SkillType.REFLECT) || (e.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (e.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((e.getSkill().getId() <= 4360) || (e.getSkill().getId() >= 4367))) // 7s
{ {
numBuffs++; numBuffs++;
} }
} }
return numBuffs; return numBuffs;
} }
@@ -6964,26 +6848,15 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public int getDeBuffCount() public int getDeBuffCount()
{ {
final Effect[] effects = getAllEffects();
int numDeBuffs = 0; int numDeBuffs = 0;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null)
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
// Check for all debuff skills // Check for all debuff skills
if (e.getSkill().isDebuff()) if (effect.getSkill().isDebuff())
{ {
numDeBuffs++; numDeBuffs++;
} }
} }
return numDeBuffs; return numDeBuffs;
} }
@@ -7002,34 +6875,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void removeFirstBuff(int preferSkill) public void removeFirstBuff(int preferSkill)
{ {
final Effect[] effects = getAllEffects();
Effect removeMe = null; Effect removeMe = null;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null) if (((effect.getSkill().getSkillType() == SkillType.BUFF) || (effect.getSkill().getSkillType() == SkillType.REFLECT) || (effect.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (effect.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((effect.getSkill().getId() <= 4360) || (effect.getSkill().getId() >= 4367)))
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (((e.getSkill().getSkillType() == SkillType.BUFF) || (e.getSkill().getSkillType() == SkillType.REFLECT) || (e.getSkill().getSkillType() == SkillType.HEAL_PERCENT) || (e.getSkill().getSkillType() == SkillType.MANAHEAL_PERCENT)) && ((e.getSkill().getId() <= 4360) || (e.getSkill().getId() >= 4367)))
{ {
if (preferSkill == 0) if (preferSkill == 0)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (e.getSkill().getId() == preferSkill) else if (effect.getSkill().getId() == preferSkill)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (removeMe == null) else if (removeMe == null)
{ {
removeMe = e; removeMe = effect;
} }
} }
} }
@@ -7046,34 +6909,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public void removeFirstDeBuff(int preferSkill) public void removeFirstDeBuff(int preferSkill)
{ {
final Effect[] effects = getAllEffects();
Effect removeMe = null; Effect removeMe = null;
for (Effect e : effects) for (Effect effect : _effects)
{ {
if (e == null) if (effect.getSkill().isDebuff())
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (e.getSkill().isDebuff())
{ {
if (preferSkill == 0) if (preferSkill == 0)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (e.getSkill().getId() == preferSkill) else if (effect.getSkill().getId() == preferSkill)
{ {
removeMe = e; removeMe = effect;
break; break;
} }
else if (removeMe == null) else if (removeMe == null)
{ {
removeMe = e; removeMe = effect;
} }
} }
} }
@@ -7091,25 +6944,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
public int getDanceCount() public int getDanceCount()
{ {
int danceCount = 0; int danceCount = 0;
for (Effect effect : _effects)
final Effect[] effects = getAllEffects();
for (Effect e : effects)
{ {
if (e == null) if (effect.getSkill().isDance() && effect.getInUse())
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (e.getSkill().isDance() && e.getInUse())
{ {
danceCount++; danceCount++;
} }
} }
return danceCount; return danceCount;
} }
@@ -7131,19 +6972,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return false; return false;
} }
final Effect[] effects = getAllEffects(); for (Effect effect : _effects)
for (Effect e : effects)
{ {
if (e == null) if ((effect.getStackType() != null) && effect.getStackType().equals(stackType))
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if ((e.getStackType() != null) && e.getStackType().equals(stackType))
{ {
return true; return true;
} }

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.model.actor.instance; package org.l2jmobius.gameserver.model.actor.instance;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -600,13 +601,12 @@ public class CubicInstance
Skill skill = null; Skill skill = null;
if ((_id >= SMART_CUBIC_EVATEMPLAR) && (_id <= SMART_CUBIC_SPECTRALMASTER)) if ((_id >= SMART_CUBIC_EVATEMPLAR) && (_id <= SMART_CUBIC_SPECTRALMASTER))
{ {
final Effect[] effects = owner.getAllEffects(); for (Effect effect : owner.getAllEffects())
for (Effect e : effects)
{ {
if ((e != null) && e.getSkill().isOffensive()) if (effect.getSkill().isOffensive())
{ {
useCubicCure = true; useCubicCure = true;
e.exit(true); effect.exit(true);
} }
} }
} }
@@ -846,8 +846,8 @@ public class CubicInstance
} }
case CANCEL: case CANCEL:
{ {
final Effect[] effects = target.getAllEffects(); final Collection<Effect> effects = target.getAllEffects();
if ((effects == null) || (effects.length == 0)) if (effects.isEmpty())
{ {
break; break;
} }

View File

@@ -8813,7 +8813,7 @@ public class PlayerInstance extends Playable
statement.close(); statement.close();
// Store all effect data along with calulated remaining reuse delays for matching skills. 'restore_type'= 0. // Store all effect data along with calulated remaining reuse delays for matching skills. 'restore_type'= 0.
final Effect[] effects = getAllEffects(); final Collection<Effect> effects = getAllEffects();
statement = con.prepareStatement(ADD_SKILL_SAVE); statement = con.prepareStatement(ADD_SKILL_SAVE);
int buffIndex = 0; int buffIndex = 0;
final List<Integer> storedSkills = new ArrayList<>(); final List<Integer> storedSkills = new ArrayList<>();
@@ -14464,7 +14464,7 @@ public class PlayerInstance extends Playable
private int getRandomFishLvl() private int getRandomFishLvl()
{ {
final Effect[] effects = getAllEffects(); final Collection<Effect> effects = getAllEffects();
int skillLevel = getSkillLevel(1315); int skillLevel = getSkillLevel(1315);
for (Effect e : effects) for (Effect e : effects)
{ {

View File

@@ -44,15 +44,14 @@ final class EffectCancel extends Effect
final int landrate = (int) getEffector().calcStat(Stat.CANCEL_VULN, 90, getEffected(), null); final int landrate = (int) getEffector().calcStat(Stat.CANCEL_VULN, 90, getEffected(), null);
if (Rnd.get(100) < landrate) if (Rnd.get(100) < landrate)
{ {
final Effect[] effects = getEffected().getAllEffects();
int maxdisp = (int) getSkill().getNegatePower(); int maxdisp = (int) getSkill().getNegatePower();
if (maxdisp == 0) if (maxdisp == 0)
{ {
maxdisp = 5; maxdisp = 5;
} }
for (Effect e : effects) for (Effect effect : getEffected().getAllEffects())
{ {
switch (e.getEffectType()) switch (effect.getEffectType())
{ {
case SIGNET_GROUND: case SIGNET_GROUND:
case SIGNET_EFFECT: case SIGNET_EFFECT:
@@ -61,13 +60,13 @@ final class EffectCancel extends Effect
} }
} }
if ((e.getSkill().getId() != 4082) && (e.getSkill().getId() != 4215) && (e.getSkill().getId() != 5182) && (e.getSkill().getId() != 4515) && (e.getSkill().getId() != 110) && (e.getSkill().getId() != 111) && (e.getSkill().getId() != 1323) && (e.getSkill().getId() != 1325) && (e.getSkill().getSkillType() == SkillType.BUFF)) if ((effect.getSkill().getId() != 4082) && (effect.getSkill().getId() != 4215) && (effect.getSkill().getId() != 5182) && (effect.getSkill().getId() != 4515) && (effect.getSkill().getId() != 110) && (effect.getSkill().getId() != 111) && (effect.getSkill().getId() != 1323) && (effect.getSkill().getId() != 1325) && (effect.getSkill().getSkillType() == SkillType.BUFF))
{ {
// TODO Fix cancel debuffs // TODO Fix cancel debuffs
if (e.getSkill().getSkillType() != SkillType.DEBUFF) if (effect.getSkill().getSkillType() != SkillType.DEBUFF)
{ {
int rate = 100; int rate = 100;
final int level = e.getLevel(); final int level = effect.getLevel();
if (level > 0) if (level > 0)
{ {
rate = 150 / (1 + level); rate = 150 / (1 + level);
@@ -84,7 +83,7 @@ final class EffectCancel extends Effect
if (Rnd.get(100) < rate) if (Rnd.get(100) < rate)
{ {
e.exit(true); effect.exit(true);
maxdisp--; maxdisp--;
if (maxdisp == 0) if (maxdisp == 0)
{ {

View File

@@ -57,17 +57,12 @@ public class EffectSignetNoise extends Effect
continue; continue;
} }
final Effect[] effects = target.getAllEffects(); for (Effect effect : target.getAllEffects())
if (effects != null)
{ {
for (Effect effect : effects) if (effect.getSkill().isDance())
{ {
if (effect.getSkill().isDance()) effect.exit(true);
{
effect.exit(true);
}
} }
// there doesn't seem to be a visible effect?
} }
} }
return true; return true;

View File

@@ -59,8 +59,7 @@ public class SkillSeed extends Skill
oldEffect.increasePower(); oldEffect.increasePower();
} }
final Effect[] effects = target.getAllEffects(); for (Effect effect : target.getAllEffects())
for (Effect effect : effects)
{ {
if (effect.getEffectType() == Effect.EffectType.SEED) if (effect.getEffectType() == Effect.EffectType.SEED)
{ {

View File

@@ -195,21 +195,17 @@ public class EnterWorld implements IClientIncomingPacket
player.sendPacket(new EtcStatusUpdate(player)); player.sendPacket(new EtcStatusUpdate(player));
final Effect[] effects = player.getAllEffects(); for (Effect effect : player.getAllEffects())
if (effects != null)
{ {
for (Effect e : effects) if (effect.getEffectType() == Effect.EffectType.HEAL_OVER_TIME)
{ {
if (e.getEffectType() == Effect.EffectType.HEAL_OVER_TIME) player.stopEffects(Effect.EffectType.HEAL_OVER_TIME);
{ player.removeEffect(effect);
player.stopEffects(Effect.EffectType.HEAL_OVER_TIME); }
player.removeEffect(e); if (effect.getEffectType() == Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME)
} {
if (e.getEffectType() == Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME) player.stopEffects(Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME);
{ player.removeEffect(effect);
player.stopEffects(Effect.EffectType.COMBAT_POINT_HEAL_OVER_TIME);
player.removeEffect(e);
}
} }
} }

View File

@@ -16,6 +16,8 @@
*/ */
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import java.util.Collection;
import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -24,16 +26,12 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
public class GMViewSkillInfo implements IClientOutgoingPacket public class GMViewSkillInfo implements IClientOutgoingPacket
{ {
private final PlayerInstance _player; private final PlayerInstance _player;
private Skill[] _skills; private final Collection<Skill> _skills;
public GMViewSkillInfo(PlayerInstance player) public GMViewSkillInfo(PlayerInstance player)
{ {
_player = player; _player = player;
_skills = _player.getAllSkills(); _skills = _player.getAllSkills();
if (_skills.length == 0)
{
_skills = new Skill[0];
}
} }
@Override @Override
@@ -41,8 +39,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket
{ {
OutgoingPackets.GM_VIEW_SKILL_INFO.writeId(packet); OutgoingPackets.GM_VIEW_SKILL_INFO.writeId(packet);
packet.writeS(_player.getName()); packet.writeS(_player.getName());
packet.writeD(_skills.length); packet.writeD(_skills.size());
for (Skill skill : _skills) for (Skill skill : _skills)
{ {
packet.writeD(skill.isPassive() ? 1 : 0); packet.writeD(skill.isPassive() ? 1 : 0);