diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/config/PVP.ini b/L2J_Mobius_1.0_Ertheia/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/config/PVP.ini +++ b/L2J_Mobius_1.0_Ertheia/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/Config.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/Config.java index 9345d9c212..920c57ae56 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/Config.java @@ -651,6 +651,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2229,6 +2231,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java index 828a1c276d..efbd2c8dde 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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_2.5_Underground/dist/game/config/PVP.ini b/L2J_Mobius_2.5_Underground/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/config/PVP.ini +++ b/L2J_Mobius_2.5_Underground/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/Config.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/Config.java index de6fc880e8..7a92105a4f 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/Config.java @@ -658,6 +658,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2246,6 +2248,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java index 828a1c276d..efbd2c8dde 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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_3.0_Helios/dist/game/config/PVP.ini b/L2J_Mobius_3.0_Helios/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/config/PVP.ini +++ b/L2J_Mobius_3.0_Helios/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/Config.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/Config.java index e804602f31..23da41af95 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/Config.java @@ -658,6 +658,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2255,6 +2257,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java index 828a1c276d..efbd2c8dde 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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_4.0_GrandCrusade/dist/game/config/PVP.ini b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/PVP.ini +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/Config.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/Config.java index 3c1ef1ab87..b04b972552 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/Config.java @@ -645,6 +645,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2235,6 +2237,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java index 828a1c276d..efbd2c8dde 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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_5.0_Salvation/dist/game/config/PVP.ini b/L2J_Mobius_5.0_Salvation/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/config/PVP.ini +++ b/L2J_Mobius_5.0_Salvation/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/Config.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/Config.java index 07d4b9f565..919d626c31 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/Config.java @@ -641,6 +641,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2311,6 +2313,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java index 828a1c276d..efbd2c8dde 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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_5.5_EtinasFate/dist/game/config/PVP.ini b/L2J_Mobius_5.5_EtinasFate/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/config/PVP.ini +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/Config.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/Config.java index 07d4b9f565..919d626c31 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/Config.java @@ -641,6 +641,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2311,6 +2313,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java index 828a1c276d..efbd2c8dde 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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_6.0_Fafurion/dist/game/config/PVP.ini b/L2J_Mobius_6.0_Fafurion/dist/game/config/PVP.ini index 42e1b86335..50b0e53a94 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/config/PVP.ini +++ b/L2J_Mobius_6.0_Fafurion/dist/game/config/PVP.ini @@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/Config.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/Config.java index 1584f3f36f..d7d3680466 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/Config.java @@ -642,6 +642,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2341,6 +2343,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java index ea08d68a5d..f75edc458f 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject 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))) + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp()); - if (absorbDamage > 0) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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 (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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.0_Saviors/dist/game/config/PVP.ini b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/PVP.ini index 224f8ed029..e599a5dfac 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/PVP.ini +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/PVP.ini @@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java index 510a5c5259..ba1300c1e9 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/Config.java @@ -651,6 +651,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2153,6 +2155,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index 55b35292cb..1d4237d89a 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util; public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable { public static final Logger LOGGER = Logger.getLogger(Creature.class.getName()); - private volatile Set> _attackByList; private boolean _isDead = false; @@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - 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) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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. - if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. + if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - if (Rnd.get(10) < 3) // Classic: Static 30% change. + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (Rnd.get(10) < 3) // Classic: Static 30% change. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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/dist/game/config/PVP.ini b/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/PVP.ini index 224f8ed029..e599a5dfac 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/PVP.ini +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/config/PVP.ini @@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java index 4dda9f7135..ecb0363add 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/Config.java @@ -651,6 +651,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2157,6 +2159,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java index 55b35292cb..1d4237d89a 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util; public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable { public static final Logger LOGGER = Logger.getLogger(Creature.class.getName()); - private volatile Set> _attackByList; private boolean _isDead = false; @@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - 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) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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. - if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. + if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - if (Rnd.get(10) < 3) // Classic: Static 30% change. + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (Rnd.get(10) < 3) // Classic: Static 30% change. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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/dist/game/config/PVP.ini b/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/PVP.ini index 224f8ed029..e599a5dfac 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/PVP.ini +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/config/PVP.ini @@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java index 4dda9f7135..ecb0363add 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/Config.java @@ -651,6 +651,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2157,6 +2159,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java index 55b35292cb..1d4237d89a 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util; public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable { public static final Logger LOGGER = Logger.getLogger(Creature.class.getName()); - private volatile Set> _attackByList; private boolean _isDead = false; @@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - 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) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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. - if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. + if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - if (Rnd.get(10) < 3) // Classic: Static 30% change. + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (Rnd.get(10) < 3) // Classic: Static 30% change. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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/dist/game/config/PVP.ini b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/PVP.ini index 224f8ed029..e599a5dfac 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/PVP.ini +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/config/PVP.ini @@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java index 4dda9f7135..ecb0363add 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/Config.java @@ -651,6 +651,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2157,6 +2159,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index 55b35292cb..1d4237d89a 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util; public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable { public static final Logger LOGGER = Logger.getLogger(Creature.class.getName()); - private volatile Set> _attackByList; private boolean _isDead = false; @@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - 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) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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. - if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. + if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - if (Rnd.get(10) < 3) // Classic: Static 30% change. + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (Rnd.get(10) < 3) // Classic: Static 30% change. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 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.4_SecretOfEmpire/dist/game/config/PVP.ini b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/PVP.ini index 224f8ed029..e599a5dfac 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/PVP.ini +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/config/PVP.ini @@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True AntiFeedInterval = 120 +# --------------------------------------------------------------------------- +# Skills +# --------------------------------------------------------------------------- + +# Enable VampiricAttack for PvP targets. +VampiricAttackAffectsPvP = True + +# Enable MpVampiricAttack for PvP targets. +MpVampiricAttackAffectsPvP = True + + # --------------------------------------------------------------------------- # Misc. # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java index 4dda9f7135..ecb0363add 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/Config.java @@ -651,6 +651,8 @@ public final class Config public static boolean ANTIFEED_DUALBOX; public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; public static int ANTIFEED_INTERVAL; + public static boolean VAMPIRIC_ATTACK_AFFECTS_PVP; + public static boolean MP_VAMPIRIC_ATTACK_AFFECTS_PVP; public static boolean ANNOUNCE_GAINAK_SIEGE; // -------------------------------------------------- @@ -2157,6 +2159,9 @@ public final class Config ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true); ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000; + VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("VampiricAttackAffectsPvP", false); + MP_VAMPIRIC_ATTACK_AFFECTS_PVP = PVPSettings.getBoolean("MpVampiricAttackAffectsPvP", false); + // sorting so binarySearch can be used later Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS); Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index 55b35292cb..1d4237d89a 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util; public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable { public static final Logger LOGGER = Logger.getLogger(Creature.class.getName()); - private volatile Set> _attackByList; private boolean _isDead = false; @@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } // Absorb HP from the damage inflicted - if (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles. + final boolean isPvP = isPlayable() && target.isPlayable(); + if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP) { - 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) + final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1); + if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE))) { - setCurrentHp(_status.getCurrentHp() + absorbDamage); + int absorbDamage = (int) Math.min(absorbHpPercent * 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. - if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. + if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP) { - if (Rnd.get(10) < 3) // Classic: Static 30% change. + if (skill != null) // Classic: Used to reduce skill MP consumption. See Orfen's Earring. { - double absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); - if (absorbPercent > 0) + if (Rnd.get(10) < 3) // Classic: Static 30% change. { - int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); - absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); - if (absorbDamage > 0) + final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0); + if (absorbMpPercent > 0) { - setCurrentMp(_status.getCurrentMp() + absorbDamage); + int absorbDamage = (int) Math.min((absorbMpPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp()); + absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp()); + if (absorbDamage > 0) + { + setCurrentMp(_status.getCurrentMp() + absorbDamage); + } } } }