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.