Configurations for using vampiric effects on PvP.
This commit is contained in:
parent
258713950d
commit
fd9f8794ef
11
L2J_Mobius_1.0_Ertheia/dist/game/config/PVP.ini
vendored
11
L2J_Mobius_1.0_Ertheia/dist/game/config/PVP.ini
vendored
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -651,6 +651,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2229,6 +2231,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -658,6 +658,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2246,6 +2248,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
L2J_Mobius_3.0_Helios/dist/game/config/PVP.ini
vendored
11
L2J_Mobius_3.0_Helios/dist/game/config/PVP.ini
vendored
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -658,6 +658,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2255,6 +2257,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -645,6 +645,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2235,6 +2237,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -641,6 +641,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2311,6 +2313,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -641,6 +641,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2311,6 +2313,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
L2J_Mobius_6.0_Fafurion/dist/game/config/PVP.ini
vendored
11
L2J_Mobius_6.0_Fafurion/dist/game/config/PVP.ini
vendored
@ -50,6 +50,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -642,6 +642,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2341,6 +2343,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -4438,26 +4438,33 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// Absorb HP from the damage inflicted
|
||||||
double absorbPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
final boolean isPvP = isPlayable() && target.isPlayable();
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
if (!isPvP || Config.VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// Absorb MP from the damage inflicted.
|
||||||
absorbPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
if (!isPvP || Config.MP_VAMPIRIC_ATTACK_AFFECTS_PVP)
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -651,6 +651,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2153,6 +2155,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
||||||
{
|
{
|
||||||
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
||||||
|
|
||||||
private volatile Set<WeakReference<Creature>> _attackByList;
|
private volatile Set<WeakReference<Creature>> _attackByList;
|
||||||
|
|
||||||
private boolean _isDead = false;
|
private boolean _isDead = false;
|
||||||
@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// 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 (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles.
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// 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 (Rnd.get(10) < 3) // Classic: Static 30% change.
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -651,6 +651,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2157,6 +2159,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
||||||
{
|
{
|
||||||
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
||||||
|
|
||||||
private volatile Set<WeakReference<Creature>> _attackByList;
|
private volatile Set<WeakReference<Creature>> _attackByList;
|
||||||
|
|
||||||
private boolean _isDead = false;
|
private boolean _isDead = false;
|
||||||
@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// 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 (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles.
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// 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 (Rnd.get(10) < 3) // Classic: Static 30% change.
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -651,6 +651,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2157,6 +2159,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
||||||
{
|
{
|
||||||
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
||||||
|
|
||||||
private volatile Set<WeakReference<Creature>> _attackByList;
|
private volatile Set<WeakReference<Creature>> _attackByList;
|
||||||
|
|
||||||
private boolean _isDead = false;
|
private boolean _isDead = false;
|
||||||
@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// 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 (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles.
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// 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 (Rnd.get(10) < 3) // Classic: Static 30% change.
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -651,6 +651,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2157,6 +2159,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
||||||
{
|
{
|
||||||
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
||||||
|
|
||||||
private volatile Set<WeakReference<Creature>> _attackByList;
|
private volatile Set<WeakReference<Creature>> _attackByList;
|
||||||
|
|
||||||
private boolean _isDead = false;
|
private boolean _isDead = false;
|
||||||
@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// 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 (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles.
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// 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 (Rnd.get(10) < 3) // Classic: Static 30% change.
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,17 @@ AntiFeedDisconnectedAsDualbox = True
|
|||||||
AntiFeedInterval = 120
|
AntiFeedInterval = 120
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Skills
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Enable VampiricAttack for PvP targets.
|
||||||
|
VampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
# Enable MpVampiricAttack for PvP targets.
|
||||||
|
MpVampiricAttackAffectsPvP = True
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Misc.
|
# Misc.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@ -651,6 +651,8 @@ public final class Config
|
|||||||
public static boolean ANTIFEED_DUALBOX;
|
public static boolean ANTIFEED_DUALBOX;
|
||||||
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
|
||||||
public static int ANTIFEED_INTERVAL;
|
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;
|
public static boolean ANNOUNCE_GAINAK_SIEGE;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
@ -2157,6 +2159,9 @@ public final class Config
|
|||||||
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
ANTIFEED_DISCONNECTED_AS_DUALBOX = PVPSettings.getBoolean("AntiFeedDisconnectedAsDualbox", true);
|
||||||
ANTIFEED_INTERVAL = PVPSettings.getInt("AntiFeedInterval", 120) * 1000;
|
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
|
// sorting so binarySearch can be used later
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
|
||||||
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
|
||||||
|
@ -179,7 +179,6 @@ import org.l2jmobius.gameserver.util.Util;
|
|||||||
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
public abstract class Creature extends WorldObject implements ISkillsHolder, IDeletable
|
||||||
{
|
{
|
||||||
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
public static final Logger LOGGER = Logger.getLogger(Creature.class.getName());
|
||||||
|
|
||||||
private volatile Set<WeakReference<Creature>> _attackByList;
|
private volatile Set<WeakReference<Creature>> _attackByList;
|
||||||
|
|
||||||
private boolean _isDead = false;
|
private boolean _isDead = false;
|
||||||
@ -4428,33 +4427,40 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Absorb HP from the damage inflicted
|
// 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 (skill == null) // Classic: Skills counted with the Vampiric Rage effect was introduced on GoD chronicles.
|
||||||
if ((absorbPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min(absorbPercent * damage, _stat.getMaxRecoverableHp() - _status.getCurrentHp());
|
final double absorbHpPercent = getStat().getValue(Stats.ABSORB_DAMAGE_PERCENT, 0) * target.getStat().getValue(Stats.ABSORB_DAMAGE_DEFENCE, 1);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentHp());
|
if ((absorbHpPercent > 0) && (Rnd.nextDouble() < _stat.getValue(Stats.ABSORB_DAMAGE_CHANCE)))
|
||||||
if (absorbDamage > 0)
|
|
||||||
{
|
{
|
||||||
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.
|
// 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 (Rnd.get(10) < 3) // Classic: Static 30% change.
|
||||||
if (absorbPercent > 0)
|
|
||||||
{
|
{
|
||||||
int absorbDamage = (int) Math.min((absorbPercent / 100.) * damage, _stat.getMaxRecoverableMp() - _status.getCurrentMp());
|
final double absorbMpPercent = _stat.getValue(Stats.ABSORB_MANA_DAMAGE_PERCENT, 0);
|
||||||
absorbDamage = Math.min(absorbDamage, (int) target.getCurrentMp());
|
if (absorbMpPercent > 0)
|
||||||
if (absorbDamage > 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user