From 2713d253702bda7f1dc46dc0572f1d385889690d Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 9 Mar 2021 09:29:33 +0000 Subject: [PATCH] Addition of TriggerSkillByDualRange effect. --- .../scripts/handlers/EffectMasterHandler.java | 1 + .../TriggerSkillByDualRange.java | 81 +++++++++++++++++++ .../game/data/stats/skills/documentation.txt | 1 + .../scripts/handlers/EffectMasterHandler.java | 1 + .../TriggerSkillByDualRange.java | 81 +++++++++++++++++++ .../game/data/stats/skills/documentation.txt | 1 + 6 files changed, 166 insertions(+) create mode 100644 L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java create mode 100644 L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java 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 41ac762926..b967dfc3eb 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 @@ -381,6 +381,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDeathBlow", TriggerSkillByDeathBlow::new); + EffectHandler.getInstance().registerHandler("TriggerSkillByDualRange", TriggerSkillByDualRange::new); EffectHandler.getInstance().registerHandler("TriggerSkillByKill", TriggerSkillByKill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByMagicType", TriggerSkillByMagicType::new); EffectHandler.getInstance().registerHandler("TriggerSkillBySkill", TriggerSkillBySkill::new); diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java new file mode 100644 index 0000000000..47d78ca00f --- /dev/null +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java @@ -0,0 +1,81 @@ +/* + * 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.model.StatSet; +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; + +/** + * Trigger Skill By Dual Range effect implementation. + * @author Mobius + */ +public class TriggerSkillByDualRange extends AbstractEffect +{ + private final SkillHolder _closeSkill; + private final SkillHolder _rangeSkill; + private final int _distance; + private final boolean _adjustLevel; + + public TriggerSkillByDualRange(StatSet params) + { + // Just use closeSkill and rangeSkill parameters. + _closeSkill = new SkillHolder(params.getInt("closeSkill"), params.getInt("closeSkillLevel", 1)); + _rangeSkill = new SkillHolder(params.getInt("rangeSkill"), params.getInt("rangeSkillLevel", 1)); + _distance = params.getInt("distance", 120); + _adjustLevel = params.getBoolean("adjustLevel", true); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effector.isPlayer()) + { + return; + } + + final SkillHolder skillHolder = effector.calculateDistance3D(effected) < _distance ? _closeSkill : _rangeSkill; + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(skillHolder.getSkillId(), skill.getLevel()) : skillHolder.getSkill(); + if (triggerSkill == null) + { + 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 739004dd72..75d16e754f 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 @@ -348,6 +348,7 @@ 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. TriggerSkillByDeathBlow: Triggers a specified skill when you land a death blow (killing a creature). +TriggerSkillByDualRange: Triggers a specified skill based on close or ranged distance. (l2jmobius) TriggerSkillByKill: Triggers a specified skill when you kill a creature. TriggerSkillByMagicType: Triggers skill when you finish casting a skill with a specified magic type. TriggerSkillBySkillAttack: Triggers skill when you finish casting a skill that does damage. 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 4a1960117f..7e918afde7 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 @@ -378,6 +378,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("TriggerSkillByAvoid", TriggerSkillByAvoid::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDamage", TriggerSkillByDamage::new); EffectHandler.getInstance().registerHandler("TriggerSkillByDeathBlow", TriggerSkillByDeathBlow::new); + EffectHandler.getInstance().registerHandler("TriggerSkillByDualRange", TriggerSkillByDualRange::new); EffectHandler.getInstance().registerHandler("TriggerSkillByKill", TriggerSkillByKill::new); EffectHandler.getInstance().registerHandler("TriggerSkillByMagicType", TriggerSkillByMagicType::new); EffectHandler.getInstance().registerHandler("TriggerSkillBySkill", TriggerSkillBySkill::new); diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java new file mode 100644 index 0000000000..47d78ca00f --- /dev/null +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/TriggerSkillByDualRange.java @@ -0,0 +1,81 @@ +/* + * 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.model.StatSet; +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; + +/** + * Trigger Skill By Dual Range effect implementation. + * @author Mobius + */ +public class TriggerSkillByDualRange extends AbstractEffect +{ + private final SkillHolder _closeSkill; + private final SkillHolder _rangeSkill; + private final int _distance; + private final boolean _adjustLevel; + + public TriggerSkillByDualRange(StatSet params) + { + // Just use closeSkill and rangeSkill parameters. + _closeSkill = new SkillHolder(params.getInt("closeSkill"), params.getInt("closeSkillLevel", 1)); + _rangeSkill = new SkillHolder(params.getInt("rangeSkill"), params.getInt("rangeSkillLevel", 1)); + _distance = params.getInt("distance", 120); + _adjustLevel = params.getBoolean("adjustLevel", true); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if ((effected == null) || !effector.isPlayer()) + { + return; + } + + final SkillHolder skillHolder = effector.calculateDistance3D(effected) < _distance ? _closeSkill : _rangeSkill; + final Skill triggerSkill = _adjustLevel ? SkillData.getInstance().getSkill(skillHolder.getSkillId(), skill.getLevel()) : skillHolder.getSkill(); + if (triggerSkill == null) + { + 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 8c499d9fa6..f17f5f0b55 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 @@ -346,6 +346,7 @@ 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. TriggerSkillByDeathBlow: Triggers a specified skill when you land a death blow (killing a creature). +TriggerSkillByDualRange: Triggers a specified skill based on close or ranged distance. (l2jmobius) TriggerSkillByKill: Triggers a specified skill when you kill a creature. TriggerSkillByMagicType: Triggers skill when you finish casting a skill with a specified magic type. TriggerSkillBySkillAttack: Triggers skill when you finish casting a skill that does damage.