Configurations for using vampiric effects on PvP.

This commit is contained in:
MobiusDevelopment
2019-06-22 11:46:01 +00:00
parent 258713950d
commit fd9f8794ef
36 changed files with 435 additions and 164 deletions

View File

@ -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);

View File

@ -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);
}
}
}