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

@@ -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_IDLE;
import java.util.Collection;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd;
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
Skill[] skills = null;
Collection<Skill> skills = null;
double dist2 = 0;
int range = 0;
@@ -902,10 +904,8 @@ public class AttackableAI extends CreatureAI
if (sk.getSkillType() == Skill.SkillType.BUFF)
{
final Effect[] effects = _actor.getAllEffects();
for (int i = 0; (effects != null) && (i < effects.length); i++)
for (Effect effect : _actor.getAllEffects())
{
final Effect effect = effects[i];
if (effect.getSkill() == sk)
{
useSkillSelf = false;
@@ -963,10 +963,8 @@ public class AttackableAI extends CreatureAI
if (sk.getSkillType() == Skill.SkillType.BUFF)
{
final Effect[] effects = _actor.getAllEffects();
for (int i = 0; (effects != null) && (i < effects.length); i++)
for (Effect effect : _actor.getAllEffects())
{
final Effect effect = effects[i];
if (effect.getSkill() == sk)
{
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 java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.l2jmobius.commons.util.Rnd;
@@ -188,14 +189,13 @@ public class ControllableMobAI extends AttackableAI
final ControllableMobAI ctrlAi = (ControllableMobAI) theTarget.getAI();
ctrlAi.forceAttack(_actor);
final Skill[] skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(target);
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + target.getTemplate().getCollisionRadius();
int maxRange = range;
if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20))))
{
// check distant skills
for (Skill sk : skills)
for (Skill sk : _actor.getAllSkills())
{
final int castRange = sk.getCastRange();
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());
final Skill[] skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(getForcedTarget());
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getForcedTarget().getTemplate().getCollisionRadius();
int maxRange = range;
if (!_actor.isMuted() && (dist2 > ((range + 20) * (range + 20))))
{
// check distant skills
for (Skill sk : skills)
for (Skill sk : _actor.getAllSkills())
{
final int castRange = sk.getCastRange();
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());
final Skill[] skills = _actor.getAllSkills();
final Collection<Skill> skills = _actor.getAllSkills();
final double dist2 = _actor.calculateDistanceSq2D(getAttackTarget());
final int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
int maxRange = range;
@@ -335,7 +334,7 @@ public class ControllableMobAI extends AttackableAI
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)
{

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 java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Future;
import java.util.logging.Logger;
@@ -585,7 +586,7 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
private void attackPrepare()
{
// Get all information needed to choose between physical or magical attack
Skill[] skills = null;
Collection<Skill> skills = null;
double dist2 = 0;
int range = 0;
FortSiegeGuardInstance sGuard;
@@ -650,10 +651,8 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
}
if (sk.getSkillType() == SkillType.BUFF)
{
final Effect[] effects = _actor.getAllEffects();
for (int i = 0; (effects != null) && (i < effects.length); i++)
for (Effect effect : _actor.getAllEffects())
{
final Effect effect = effects[i];
if (effect.getSkill() == sk)
{
useSkillSelf = false;
@@ -788,10 +787,8 @@ public class FortSiegeGuardAI extends CreatureAI implements Runnable
}
if (sk.getSkillType() == SkillType.BUFF)
{
final Effect[] effects = _actor.getAllEffects();
for (int i = 0; (effects != null) && (i < effects.length); i++)
for (Effect effect : _actor.getAllEffects())
{
final Effect effect = effects[i];
if (effect.getSkill() == sk)
{
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_IDLE;
import java.util.Collection;
import java.util.concurrent.Future;
import org.l2jmobius.Config;
@@ -307,7 +308,7 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
private void attackPrepare()
{
// Get all information needed to chose between physical or magical attack
Skill[] skills = null;
Collection<Skill> skills = null;
double dist2 = 0;
int range = 0;
final SiegeGuardInstance sGuard = (SiegeGuardInstance) _actor;
@@ -368,10 +369,8 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
}
if (sk.getSkillType() == Skill.SkillType.BUFF)
{
final Effect[] effects = _actor.getAllEffects();
for (int i = 0; (effects != null) && (i < effects.length); i++)
for (Effect effect : _actor.getAllEffects())
{
final Effect effect = effects[i];
if (effect.getSkill() == sk)
{
useSkillSelf = false;
@@ -485,10 +484,8 @@ public class SiegeGuardAI extends CreatureAI implements Runnable
if (sk.getSkillType() == Skill.SkillType.BUFF)
{
final Effect[] effects = _actor.getAllEffects();
for (int i = 0; (effects != null) && (i < effects.length); i++)
for (Effect effect : _actor.getAllEffects())
{
final Effect effect = effects[i];
if (effect.getSkill() == sk)
{
useSkillSelf = false;

View File

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

View File

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

View File

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

View File

@@ -740,19 +740,13 @@ public class Potions implements IItemHandler
private boolean isEffectReplaceable(Playable activeChar, Enum<EffectType> effectType, int itemId)
{
final Effect[] effects = activeChar.getAllEffects();
if (effects == null)
for (Effect effect : activeChar.getAllEffects())
{
return true;
}
for (Effect e : effects)
{
if ((e.getEffectType() == effectType) && e.getSkill().isPotion())
if ((effect.getEffectType() == effectType) && effect.getSkill().isPotion())
{
// 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...
if (e.getTaskTime() > ((e.getSkill().getBuffDuration() * 67) / 100000))
if (effect.getTaskTime() > ((effect.getSkill().getBuffDuration() * 67) / 100000))
{
return true;
}

View File

@@ -63,12 +63,11 @@ public class Remedy implements IItemHandler
final int itemId = item.getItemId();
if (itemId == 1831) // antidote
{
final Effect[] effects = player.getAllEffects();
for (Effect e : effects)
for (Effect effect : player.getAllEffects())
{
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;
}
}
@@ -79,12 +78,11 @@ public class Remedy implements IItemHandler
}
else if (itemId == 1832) // advanced antidote
{
final Effect[] effects = player.getAllEffects();
for (Effect e : effects)
for (Effect effect : player.getAllEffects())
{
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;
}
}
@@ -95,12 +93,11 @@ public class Remedy implements IItemHandler
}
else if (itemId == 1833) // bandage
{
final Effect[] effects = player.getAllEffects();
for (Effect e : effects)
for (Effect effect : player.getAllEffects())
{
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;
}
}
@@ -111,12 +108,11 @@ public class Remedy implements IItemHandler
}
else if (itemId == 1834) // emergency dressing
{
final Effect[] effects = player.getAllEffects();
for (Effect e : effects)
for (Effect effect : player.getAllEffects())
{
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;
}
}
@@ -127,12 +123,11 @@ public class Remedy implements IItemHandler
}
else if (itemId == 3889) // potion of recovery
{
final Effect[] effects = player.getAllEffects();
for (Effect e : effects)
for (Effect effect : player.getAllEffects())
{
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;
final Effect[] effects = target.getAllEffects();
if (effects != null)
for (Effect e : target.getAllEffects())
{
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;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Logger;
@@ -201,12 +202,11 @@ public class Disablers implements ISkillHandler
// do nothing if not on mob
if (Formulas.getInstance().calcSkillSuccess(creature, target, skill, ss, sps, bss))
{
final Effect[] effects = target.getAllEffects();
for (Effect e : effects)
for (Effect effect : target.getAllEffects())
{
if (e.getSkill().getSkillType() == type)
if (effect.getSkill().getSkillType() == type)
{
e.exit(false);
effect.exit(false);
}
}
skill.applyEffects(creature, target, ss, sps, bss);
@@ -364,12 +364,11 @@ public class Disablers implements ISkillHandler
{
continue;
}
final Effect[] effects = target1.getAllEffects();
for (Effect e : effects)
for (Effect effect : target1.getAllEffects())
{
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;
}
final Effect[] effects = target1.getAllEffects();
for (Effect e : effects)
for (Effect effect : target1.getAllEffects())
{
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);
if (Rnd.get(100) < landrate)
{
final Effect[] effects = target.getAllEffects();
final Collection<Effect> effects = target.getAllEffects();
int maxfive = 5;
for (Effect e : effects)
{
@@ -523,15 +521,14 @@ public class Disablers implements ISkillHandler
landrate = (int) target.calcStat(Stat.CANCEL_VULN, landrate, target, null);
if (Rnd.get(100) < landrate)
{
final Effect[] effects = target.getAllEffects();
int maxdisp = (int) skill.getNegatePower();
if (maxdisp == 0)
{
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_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;
final int level = e.getLevel();
final int level = effect.getLevel();
if (level > 0)
{
rate = 150 / (1 + level);
@@ -560,7 +557,7 @@ public class Disablers implements ISkillHandler
if (Rnd.get(100) < rate)
{
e.exit(true);
effect.exit(true);
maxdisp--;
if (maxdisp == 0)
{
@@ -764,8 +761,7 @@ public class Disablers implements ISkillHandler
private void negateEffect(Creature target, SkillType type, double power, int skillId)
{
final Effect[] effects = target.getAllEffects();
for (Effect e : effects)
for (Effect e : target.getAllEffects())
{
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;
/**
* 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. */
protected Map<String, List<Effect>> _stackedEffects = new HashMap<>();
@@ -3026,20 +3026,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return;
}
final Effect[] effects = getAllEffects();
// 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 (((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());
}
synchronized (_effects)
{
// 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++)
{
if (_effects.get(i) == null)
{
_effects.remove(i);
i--;
continue;
}
if (_effects.get(i) != null)
{
final int skillId = _effects.get(i).getSkill().getId();
if (!_effects.get(i).getSkill().isToggle() && ((skillId <= 4360) || (skillId >= 4367)))
{
pos++;
}
}
else
{
break;
}
}
_effects.add(pos, newEffect);
}
else
{
_effects.add(newEffect);
}
}
// 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++)
// {
// if (_effects.get(i) != null)
// {
// final int skillId = _effects.get(i).getSkill().getId();
// if (!_effects.get(i).getSkill().isToggle() && ((skillId <= 4360) || (skillId >= 4367)))
// {
// pos++;
// }
// }
// else
// {
// break;
// }
// }
// _effects.add(pos, newEffect);
// }
// else
// {
_effects.add(newEffect);
// }
// Check if a stack group is defined for this effect
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.
if (Config.EFFECT_CANCELING && !newStackedEffect.isHerbEffect() && (stackQueue.size() > 1))
{
synchronized (_effects)
{
_effects.remove(stackQueue.get(1));
}
_effects.remove(stackQueue.get(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
updateEffectIcons();
@@ -3458,20 +3430,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public void stopAllEffects()
{
final Effect[] effects = getAllEffects();
for (Effect effect : effects)
for (Effect effect : _effects)
{
if (effect != null)
{
effect.exit(true);
}
else
{
synchronized (_effects)
{
_effects.remove(effect);
}
}
effect.exit(true);
}
if (this instanceof PlayerInstance)
@@ -3543,15 +3504,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
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;
}
@@ -3577,18 +3534,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
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)
{
effect.exit(true);
@@ -3607,15 +3554,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
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;
}
@@ -3897,44 +3840,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
}
// 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);
i--;
continue;
effect.addIcon(mi);
}
// C4
if (!_effects.get(i).getShowIcon() && !_effects.get(i).getSkill().isPotion())
// Like L2OFF toggle and healing potions must not be showed on party buff list
if ((ps != null) && !effect.getSkill().isToggle() && (effect.getSkill().getId() != 2031) && (effect.getSkill().getId() != 2037) && (effect.getSkill().getId() != 2032))
{
continue;
effect.addPartySpelledIcon(ps);
}
if ((_effects.get(i).getEffectType() == Effect.EffectType.CHARGE) && (player != null))
if (os != null)
{
// handled by EtcStatusUpdate
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);
}
effect.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.
* @return A table containing all active skills effect in progress on the Creature
*/
public Effect[] getAllEffects()
public Collection<Effect> getAllEffects()
{
synchronized (_effects)
{
return _effects.toArray(new Effect[_effects.size()]);
}
return _effects;
}
/**
@@ -4045,19 +3981,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public Effect getFirstEffect(int index)
{
final Effect[] effects = getAllEffects();
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.getInUse())
@@ -4082,19 +4008,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public Effect getFirstEffect(SkillType type)
{
final Effect[] effects = getAllEffects();
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.getInUse())
@@ -4108,7 +4024,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
}
}
}
return effNotInUse;
}
@@ -4123,19 +4038,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public Effect getFirstEffect(Skill skill)
{
final Effect[] effects = getAllEffects();
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.getInUse())
@@ -4164,19 +4069,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public Effect getFirstEffect(Effect.EffectType tp)
{
final Effect[] effects = getAllEffects();
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.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
* @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()
{
final Effect[] effects = getAllEffects();
int numBuffs = 0;
for (Effect e : effects)
for (Effect effect : _effects)
{
if (e == null)
{
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
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
{
numBuffs++;
}
}
return numBuffs;
}
@@ -6917,26 +6801,15 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public int getDeBuffCount()
{
final Effect[] effects = getAllEffects();
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
if (e.getSkill().isDebuff())
if (effect.getSkill().isDebuff())
{
numDeBuffs++;
}
}
return numDeBuffs;
}
@@ -6955,34 +6828,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/
public void removeFirstBuff(int preferSkill)
{
final Effect[] effects = getAllEffects();
Effect removeMe = null;
for (Effect e : effects)
for (Effect effect : _effects)
{
if (e == null)
{
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 (((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)))
{
if (preferSkill == 0)
{
removeMe = e;
removeMe = effect;
break;
}
else if (e.getSkill().getId() == preferSkill)
else if (effect.getSkill().getId() == preferSkill)
{
removeMe = e;
removeMe = effect;
break;
}
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)
{
final Effect[] effects = getAllEffects();
Effect removeMe = null;
for (Effect e : effects)
for (Effect effect : _effects)
{
if (e == null)
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (e.getSkill().isDebuff())
if (effect.getSkill().isDebuff())
{
if (preferSkill == 0)
{
removeMe = e;
removeMe = effect;
break;
}
else if (e.getSkill().getId() == preferSkill)
else if (effect.getSkill().getId() == preferSkill)
{
removeMe = e;
removeMe = effect;
break;
}
else if (removeMe == null)
{
removeMe = e;
removeMe = effect;
}
}
}
@@ -7044,25 +6897,13 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
public int getDanceCount()
{
int danceCount = 0;
final Effect[] effects = getAllEffects();
for (Effect e : effects)
for (Effect effect : _effects)
{
if (e == null)
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if (e.getSkill().isDance() && e.getInUse())
if (effect.getSkill().isDance() && effect.getInUse())
{
danceCount++;
}
}
return danceCount;
}
@@ -7084,19 +6925,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
return false;
}
final Effect[] effects = getAllEffects();
for (Effect e : effects)
for (Effect effect : _effects)
{
if (e == null)
{
synchronized (_effects)
{
_effects.remove(e);
}
continue;
}
if ((e.getStackType() != null) && e.getStackType().equals(stackType))
if ((effect.getStackType() != null) && effect.getStackType().equals(stackType))
{
return true;
}

View File

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

View File

@@ -8661,7 +8661,7 @@ public class PlayerInstance extends Playable
statement.close();
// 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);
int buffIndex = 0;
final List<Integer> storedSkills = new ArrayList<>();
@@ -14139,7 +14139,7 @@ public class PlayerInstance extends Playable
private int getRandomFishLvl()
{
final Effect[] effects = getAllEffects();
final Collection<Effect> effects = getAllEffects();
int skillLevel = getSkillLevel(1315);
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);
if (Rnd.get(100) < landrate)
{
final Effect[] effects = getEffected().getAllEffects();
int maxdisp = (int) getSkill().getNegatePower();
if (maxdisp == 0)
{
maxdisp = 5;
}
for (Effect e : effects)
for (Effect effect : getEffected().getAllEffects())
{
switch (e.getEffectType())
switch (effect.getEffectType())
{
case SIGNET_GROUND:
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
if (e.getSkill().getSkillType() != SkillType.DEBUFF)
if (effect.getSkill().getSkillType() != SkillType.DEBUFF)
{
int rate = 100;
final int level = e.getLevel();
final int level = effect.getLevel();
if (level > 0)
{
rate = 150 / (1 + level);
@@ -84,7 +83,7 @@ final class EffectCancel extends Effect
if (Rnd.get(100) < rate)
{
e.exit(true);
effect.exit(true);
maxdisp--;
if (maxdisp == 0)
{

View File

@@ -57,17 +57,12 @@ public class EffectSignetNoise extends Effect
continue;
}
final Effect[] effects = target.getAllEffects();
if (effects != null)
for (Effect effect : target.getAllEffects())
{
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;

View File

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

View File

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

View File

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