From 5cf8f30b9d31d040d02ad1db44472e6f60cdb2a3 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 5 Nov 2017 20:36:58 +0000 Subject: [PATCH] Magical vampiric effects. Contributed by Liamxroy. --- .../handlers/effecthandlers/MagicalAttack.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormal.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormalSlot.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttackRange.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttack.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormal.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormalSlot.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttackRange.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttack.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormal.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormalSlot.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttackRange.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttack.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormal.java | 12 ++++++++++++ .../effecthandlers/MagicalAttackByAbnormalSlot.java | 12 ++++++++++++ .../handlers/effecthandlers/MagicalAttackRange.java | 12 ++++++++++++ 16 files changed, 192 insertions(+) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java index 553009ab81..0cd10f3cae 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java @@ -102,6 +102,18 @@ public final class MagicalAttack extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java index 5d6ad3be17..1b84f38592 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java @@ -89,6 +89,18 @@ public final class MagicalAttackByAbnormal extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java index 1d3c4f5c76..14032f51fb 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java @@ -106,6 +106,18 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java index 078001131c..3b0914e3e6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java @@ -104,6 +104,18 @@ public final class MagicalAttackRange extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java index 553009ab81..0cd10f3cae 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java @@ -102,6 +102,18 @@ public final class MagicalAttack extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java index 5d6ad3be17..1b84f38592 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java @@ -89,6 +89,18 @@ public final class MagicalAttackByAbnormal extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java index 1d3c4f5c76..14032f51fb 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java @@ -106,6 +106,18 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java index 078001131c..3b0914e3e6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java @@ -104,6 +104,18 @@ public final class MagicalAttackRange extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java index 553009ab81..0cd10f3cae 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java @@ -102,6 +102,18 @@ public final class MagicalAttack extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java index 5d6ad3be17..1b84f38592 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java @@ -89,6 +89,18 @@ public final class MagicalAttackByAbnormal extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java index 1d3c4f5c76..14032f51fb 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java @@ -106,6 +106,18 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java index 078001131c..3b0914e3e6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java @@ -104,6 +104,18 @@ public final class MagicalAttackRange extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java index 553009ab81..0cd10f3cae 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java @@ -102,6 +102,18 @@ public final class MagicalAttack extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java index 5d6ad3be17..1b84f38592 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java @@ -89,6 +89,18 @@ public final class MagicalAttackByAbnormal extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java index 1d3c4f5c76..14032f51fb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormalSlot.java @@ -106,6 +106,18 @@ public final class MagicalAttackByAbnormalSlot extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java index 078001131c..3b0914e3e6 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackRange.java @@ -104,6 +104,18 @@ public final class MagicalAttackRange extends AbstractEffect { effected.reduceCurrentHp(damage, effector, skill, false, false, mcrit, false); effector.sendDamageMessage(effected, skill, (int) damage, mcrit, false); + + // Absorb HP from the damage inflicted + double absorbPercent = effector.getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * effector.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < effector.getStat().getValue(Stats.ABSORB_DAMAGE_CHANCE))) + { + int absorbDamage = (int) Math.min(absorbPercent * damage, effector.getMaxRecoverableHp() - effector.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) effected.getCurrentHp()); + if (absorbDamage > 0) + { + effector.setCurrentHp(effector.getCurrentHp() + absorbDamage); + } + } } } } \ No newline at end of file