Synced previous changes with TriggerSkillByMagicType effect.

This commit is contained in:
MobiusDevelopment 2021-08-18 14:39:50 +00:00
parent 399ebe3686
commit c2d8864dd7
42 changed files with 1029 additions and 924 deletions

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);

View File

@ -38,27 +38,42 @@ import org.l2jmobius.gameserver.model.skills.targets.TargetType;
/** /**
* Trigger skill by isMagic type. * Trigger skill by isMagic type.
* @author Nik * @author Zealar
*/ */
public class TriggerSkillByMagicType extends AbstractEffect public class TriggerSkillByMagicType extends AbstractEffect
{ {
private final int[] _magicTypes; private final int[] _magicTypes;
private final int _chance; private final int _chance;
private final int _skillLevelScaleTo;
private final SkillHolder _skill; private final SkillHolder _skill;
private final int _skillLevelScaleTo;
private final TargetType _targetType; private final TargetType _targetType;
private final boolean _replace;
/**
* @param params
*/
public TriggerSkillByMagicType(StatSet params) public TriggerSkillByMagicType(StatSet params)
{ {
_chance = params.getInt("chance", 100);
_magicTypes = params.getIntArray("magicTypes", ";"); _magicTypes = params.getIntArray("magicTypes", ";");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0)); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true);
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
@ -78,6 +93,20 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
WorldObject target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), _skill.getSkill(), false, false, false);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
if ((target == null) || !target.isCreature())
{
return;
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {
@ -85,7 +114,7 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
else else
{ {
final BuffInfo buffInfo = ((Creature) event.getTarget()).getEffectList().getBuffInfoBySkillId(_skill.getSkillId()); final BuffInfo buffInfo = ((Creature) target).getEffectList().getBuffInfoBySkillId(_skill.getSkillId());
if (buffInfo != null) if (buffInfo != null)
{ {
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1)); triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
@ -96,36 +125,12 @@ public class TriggerSkillByMagicType extends AbstractEffect
} }
} }
WorldObject target = null; // Remove existing effect, otherwise time will not be renewed at max level.
try if (_replace)
{ {
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getCaster(), event.getTarget(), triggerSkill, false, false, false); ((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill);
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
} }
if ((target != null) && target.isCreature()) SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
{
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);
}
}
@Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
} }
} }

View File

@ -52,7 +52,7 @@ public class TriggerSkillBySkill extends AbstractEffect
{ {
_castSkillId = params.getInt("castSkillId"); _castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100); _chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel")); _skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0); _skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
_replace = params.getBoolean("replace", true); _replace = params.getBoolean("replace", true);
@ -61,6 +61,11 @@ public class TriggerSkillBySkill extends AbstractEffect
@Override @Override
public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item) public void onStart(Creature effector, Creature effected, Skill skill, ItemInstance item)
{ {
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))
{
return;
}
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this)); effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
} }
@ -72,7 +77,7 @@ public class TriggerSkillBySkill extends AbstractEffect
private void onSkillUseEvent(OnCreatureSkillFinishCast event) private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{ {
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0))) if (!event.getTarget().isCreature())
{ {
return; return;
} }
@ -82,11 +87,6 @@ public class TriggerSkillBySkill extends AbstractEffect
return; return;
} }
if (!event.getTarget().isCreature())
{
return;
}
if ((_chance < 100) && (Rnd.get(100) > _chance)) if ((_chance < 100) && (Rnd.get(100) > _chance))
{ {
return; return;
@ -127,7 +127,7 @@ public class TriggerSkillBySkill extends AbstractEffect
// Remove existing effect, otherwise time will not be renewed at max level. // Remove existing effect, otherwise time will not be renewed at max level.
if (_replace) if (_replace)
{ {
((Creature) target).getEffectList().stopSkillEffects(true, triggerSkill); ((Creature) target).getEffectList().stopSkillEffects(false, triggerSkill);
} }
SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill); SkillCaster.triggerCast(event.getCaster(), (Creature) target, triggerSkill);