From ba770312fde3ef03e4b6aa838703ba93d7273240 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 29 Dec 2018 04:12:11 +0000 Subject: [PATCH] Classic adjustments for absorb damage effects. --- .../gameserver/model/actor/L2Character.java | 30 +++++++++++-------- .../gameserver/model/actor/L2Character.java | 30 +++++++++++-------- .../gameserver/model/actor/L2Character.java | 30 +++++++++++-------- .../gameserver/model/actor/L2Character.java | 30 +++++++++++-------- 4 files changed, 72 insertions(+), 48 deletions(-) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 58becafc19..c113d294da 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -4367,26 +4367,32 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); - if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) + if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); + if (absorbDamage > 0) + { + setCurrentHp(_status.getCurrentHp() + absorbDamage); + } } } // Absorb MP from the damage inflicted. - absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); + if (absorbDamage > 0) + { + setCurrentMp(_status.getCurrentMp() + absorbDamage); + } } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 58becafc19..c113d294da 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -4367,26 +4367,32 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); - if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) + if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); + if (absorbDamage > 0) + { + setCurrentHp(_status.getCurrentHp() + absorbDamage); + } } } // Absorb MP from the damage inflicted. - absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); + if (absorbDamage > 0) + { + setCurrentMp(_status.getCurrentMp() + absorbDamage); + } } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 58becafc19..c113d294da 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -4367,26 +4367,32 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); - if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) + if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); + if (absorbDamage > 0) + { + setCurrentHp(_status.getCurrentHp() + absorbDamage); + } } } // Absorb MP from the damage inflicted. - absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); + if (absorbDamage > 0) + { + setCurrentMp(_status.getCurrentMp() + absorbDamage); + } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/actor/L2Character.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/actor/L2Character.java index 58becafc19..c113d294da 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/actor/L2Character.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/com/l2jmobius/gameserver/model/actor/L2Character.java @@ -4367,26 +4367,32 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); - if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) + if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); + if (absorbDamage > 0) + { + setCurrentHp(_status.getCurrentHp() + absorbDamage); + } } } // Absorb MP from the damage inflicted. - absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); + if (absorbDamage > 0) + { + setCurrentMp(_status.getCurrentMp() + absorbDamage); + } } }