|
@@ -19,6 +19,7 @@
|
|
|
package com.l2jserver.gameserver.model.skills;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.StringTokenizer;
|
|
@@ -254,6 +255,8 @@ public abstract class L2Skill implements IChanceSkillTrigger
|
|
|
|
|
|
private int _npcId = 0;
|
|
|
|
|
|
+ private byte[] _effectTypes;
|
|
|
+
|
|
|
protected L2Skill(StatsSet set)
|
|
|
{
|
|
|
_id = set.getInteger("skill_id");
|
|
@@ -1994,24 +1997,33 @@ public abstract class L2Skill implements IChanceSkillTrigger
|
|
|
*/
|
|
|
public boolean hasEffectType(L2EffectType... types)
|
|
|
{
|
|
|
- if (hasEffects())
|
|
|
+ if (hasEffects() && (types != null) && (types.length > 0))
|
|
|
{
|
|
|
- final Env env = new Env();
|
|
|
- env.setSkill(this);
|
|
|
- for (EffectTemplate et : _effectTemplates)
|
|
|
+ if (_effectTypes == null)
|
|
|
{
|
|
|
- final L2Effect e = et.getEffect(env, true);
|
|
|
- if (e == null)
|
|
|
- {
|
|
|
- continue;
|
|
|
- }
|
|
|
+ _effectTypes = new byte[_effectTemplates.length];
|
|
|
+
|
|
|
+ final Env env = new Env();
|
|
|
+ env.setSkill(this);
|
|
|
|
|
|
- for (L2EffectType type : types)
|
|
|
+ int i = 0;
|
|
|
+ for (EffectTemplate et : _effectTemplates)
|
|
|
{
|
|
|
- if (e.getEffectType() == type)
|
|
|
+ final L2Effect e = et.getEffect(env, true);
|
|
|
+ if (e == null)
|
|
|
{
|
|
|
- return true;
|
|
|
+ continue;
|
|
|
}
|
|
|
+ _effectTypes[i++] = (byte) e.getEffectType().ordinal();
|
|
|
+ }
|
|
|
+ Arrays.sort(_effectTypes);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (L2EffectType type : types)
|
|
|
+ {
|
|
|
+ if (Arrays.binarySearch(_effectTypes, (byte) type.ordinal()) >= 0)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|
|
|
}
|