diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java index 94445cf000..a70ba55319 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -364,6 +364,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt index effaaf887c..2b90899468 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt @@ -332,6 +332,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java index 94445cf000..a70ba55319 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -364,6 +364,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt index effaaf887c..2b90899468 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt @@ -332,6 +332,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java index 94445cf000..a70ba55319 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -364,6 +364,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt index effaaf887c..2b90899468 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt @@ -332,6 +332,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java index 85906025d9..90980ea193 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -369,6 +369,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt index bc4d0e4022..43ba17fbe2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt @@ -337,6 +337,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java index 75cf066f4f..43ebd4968b 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -374,6 +374,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt index 7f6460201a..619dfbde53 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/documentation.txt @@ -342,6 +342,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java index 05bb5b4387..5530ef8da1 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -375,6 +375,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt index cfc4b8176d..130b688b37 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/documentation.txt @@ -343,6 +343,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java index 05bb5b4387..5530ef8da1 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -375,6 +375,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt index cfc4b8176d..130b688b37 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/documentation.txt @@ -343,6 +343,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java index ea8bed1855..b21b4d92c3 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -375,6 +375,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt index 7ea51889ea..8ad58d0f8a 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/documentation.txt @@ -342,6 +342,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java index 9fa5a16e8e..41ac762926 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -376,6 +376,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/documentation.txt index f13bdc7b42..739004dd72 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/documentation.txt @@ -343,6 +343,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java index 9fa5a16e8e..41ac762926 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -376,6 +376,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt index f13bdc7b42..739004dd72 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/documentation.txt @@ -343,6 +343,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java index aa14a7da76..86b06303c2 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -360,6 +360,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt index 732ad6a34e..1f4d879ef5 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt @@ -328,6 +328,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java index aa14a7da76..86b06303c2 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -360,6 +360,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt index 732ad6a34e..1f4d879ef5 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/documentation.txt @@ -328,6 +328,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java index 45c2b835f6..8430a4c68a 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -361,6 +361,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt index 86299a7319..2e36c5bd0c 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/documentation.txt @@ -329,6 +329,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java index ea78426d30..fcf2e9b815 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -365,6 +365,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt index accf61f799..adebacae1b 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/stats/skills/documentation.txt @@ -333,6 +333,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java index ea78426d30..fcf2e9b815 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -365,6 +365,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt index accf61f799..adebacae1b 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/stats/skills/documentation.txt @@ -333,6 +333,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java index 83fc72e9a5..1154cf3494 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -367,6 +367,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt index 62f5dbac69..a583d3f6e9 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/stats/skills/documentation.txt @@ -335,6 +335,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java index 3e1772fe4e..13e2f150e4 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -363,6 +363,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt index 46ebf80d44..f3f7215ac7 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/stats/skills/documentation.txt @@ -330,6 +330,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java index c7f33a08d3..4a1960117f 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -373,6 +373,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt index 775ba7d93b..8c499d9fa6 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/stats/skills/documentation.txt @@ -341,6 +341,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd index 7356764995..f330625541 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd @@ -754,6 +754,7 @@ + diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/EffectMasterHandler.java index c7f33a08d3..4a1960117f 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -373,6 +373,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("Transformation", Transformation::new); EffectHandler.getInstance().registerHandler("TrapDetect", TrapDetect::new); EffectHandler.getInstance().registerHandler("TrapRemove", TrapRemove::new); + EffectHandler.getInstance().registerHandler("TriggerSkill", TriggerSkill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAttack", TriggerSkillByAttack::new); EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java new file mode 100644 index 0000000000..1fe23aaf20 --- /dev/null +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkill.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package handlers.effecthandlers; + +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.gameserver.data.xml.SkillData; +import org.l2jmobius.gameserver.handler.TargetHandler; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.SkillHolder; +import org.l2jmobius.gameserver.model.holders.SkillUseHolder; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; +import org.l2jmobius.gameserver.model.skills.targets.TargetType; + +/** + * Trigger Skill effect implementation. + * @author Mobius + */ +public class TriggerSkill extends AbstractEffect +{ + private final SkillHolder _skill; + private final TargetType _targetType; + private final boolean _adjustLevel; + + public TriggerSkill(StatSet params) + { + _skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1)); + _targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET); + _adjustLevel = params.getBoolean("adjustLevel", false); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effected.isCreature() || !effector.isPlayer()) + { + return; + } + + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(_skill.getSkillId(), skill.getLevel()) : _skill.getSkill(); + if (triggerSkill == null) + { + return; + } + + WorldObject target = null; + try + { + target = TargetHandler.getInstance().getHandler(_targetType).getTarget(effector, effected, triggerSkill, false, false, false); + } + catch (Exception e) + { + LOGGER.warning("Exception in ITargetTypeHandler.getTarget(): " + e.getMessage()); + } + + if ((target == null) || !target.isCreature()) + { + return; + } + + final SkillUseHolder queuedSkill = effector.getActingPlayer().getQueuedSkill(); + if (queuedSkill != null) + { + ThreadPool.schedule(() -> + { + effector.getActingPlayer().setQueuedSkill(queuedSkill.getSkill(), queuedSkill.getItem(), queuedSkill.isCtrlPressed(), queuedSkill.isShiftPressed()); + }, 10); + } + + effector.getActingPlayer().setQueuedSkill(triggerSkill, null, false, false); + } +} diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/stats/skills/documentation.txt index 775ba7d93b..8c499d9fa6 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/stats/skills/documentation.txt +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/stats/skills/documentation.txt @@ -341,6 +341,7 @@ TransferHate: Transfers Npc's hate from you to your target. Transformation: Transforms into the specified transformation id and gives its template skills. TrapDetect: Detects a hidden trap. TrapRemove: Removes a trap. +TriggerSkill: Triggers a specified skill. (l2jmobius) TriggerSkillByAttack: Triggers a specified skill when you deal damage. TriggerSkillByAvoid: Triggers a specified skill when you avoid autoattack damage. TriggerSkillByDamage: Triggers a specified skill when you receive damage. diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/skills.xsd index 7356764995..f330625541 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/skills.xsd @@ -754,6 +754,7 @@ +