Sync with L2jServer HighFive Sep 8th 2015.
This commit is contained in:
@@ -531,7 +531,7 @@ public final class Formulas
|
||||
double baseMod = ((77 * (power + (attacker.getPAtk(target) * ssboost))) / defence);
|
||||
// Critical
|
||||
double criticalMod = (attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill));
|
||||
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POSITION, 1, target, skill) - 1) / 2);
|
||||
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POS, 1, target, skill) - 1) / 2);
|
||||
double criticalVulnMod = (target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, skill));
|
||||
double criticalAddMod = ((attacker.getStat().calcStat(Stats.CRITICAL_DAMAGE_ADD, 0) * 6.1 * 77) / defence);
|
||||
double criticalAddVuln = target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill);
|
||||
@@ -623,14 +623,14 @@ public final class Formulas
|
||||
double baseMod = ((77 * (skill.getPower(isPvP, isPvE) + attacker.getPAtk(target))) / defence) * ssboost;
|
||||
// Critical
|
||||
double criticalMod = (attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill));
|
||||
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POSITION, 1, target, skill) - 1) / 2);
|
||||
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POS, 1, target, skill) - 1) / 2);
|
||||
double criticalVulnMod = (target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, skill));
|
||||
double criticalAddMod = ((attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 6.1 * 77) / defence);
|
||||
double criticalAddVuln = target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill);
|
||||
// Trait, elements
|
||||
double generalTraitMod = calcGeneralTraitBonus(attacker, target, skill.getTraitType(), false);
|
||||
double attributeMod = calcAttributeBonus(attacker, target, skill);
|
||||
double weaponMod = attacker.getRandomDamageMultiplier();
|
||||
double weaponMod = attacker.getRandomDamageMultiplier(); // 1?
|
||||
|
||||
double penaltyMod = 1;
|
||||
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_DMG_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 2))
|
||||
@@ -758,15 +758,15 @@ public final class Formulas
|
||||
|
||||
if (crit)
|
||||
{
|
||||
// Finally retail like formula
|
||||
damage = 2 * attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * attacker.calcStat(Stats.CRITICAL_DAMAGE_POSITION, 1, target, skill) * target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, null) * ((70 * damage) / (defence * reduceDef));
|
||||
// Crit dmg add is almost useless in normal hits...
|
||||
damage += ((attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 70) / (defence * reduceDef));
|
||||
// Retail like formula.
|
||||
damage = 2 * attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * attacker.calcStat(Stats.CRITICAL_DAMAGE_POS, 1, target, skill) * target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, null) * ((76 * damage) / (defence * reduceDef));
|
||||
// Crit dmg add is almost useless in normal hits.
|
||||
damage += ((attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 77) / (defence * reduceDef));
|
||||
damage += target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill);
|
||||
}
|
||||
else
|
||||
{
|
||||
damage = (70 * damage) / (defence * reduceDef);
|
||||
damage = (76 * damage) / (defence * reduceDef);
|
||||
}
|
||||
|
||||
damage *= calcAttackTraitBonus(attacker, target);
|
||||
@@ -879,7 +879,7 @@ public final class Formulas
|
||||
|
||||
public static final double calcMagicDam(L2Character attacker, L2Character target, Skill skill, byte shld, boolean sps, boolean bss, boolean mcrit)
|
||||
{
|
||||
int mDef = target.getMDef(attacker, skill);
|
||||
double mDef = target.getMDef(attacker, skill);
|
||||
switch (shld)
|
||||
{
|
||||
case SHIELD_DEFENSE_SUCCEED:
|
||||
@@ -1024,7 +1024,7 @@ public final class Formulas
|
||||
|
||||
public static final double calcMagicDam(L2CubicInstance attacker, L2Character target, Skill skill, boolean mcrit, byte shld)
|
||||
{
|
||||
int mDef = target.getMDef(attacker.getOwner(), skill);
|
||||
double mDef = target.getMDef(attacker.getOwner(), skill);
|
||||
switch (shld)
|
||||
{
|
||||
case SHIELD_DEFENSE_SUCCEED:
|
||||
@@ -1108,17 +1108,30 @@ public final class Formulas
|
||||
return damage;
|
||||
}
|
||||
|
||||
public static final boolean calcCrit(L2Character attacker, L2Character target)
|
||||
{
|
||||
return calcCrit(attacker, target, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true in case of critical hit
|
||||
* @param rate
|
||||
* @param skill
|
||||
* @param attacker
|
||||
* @param target
|
||||
* @param skill
|
||||
* @return
|
||||
*/
|
||||
public static final boolean calcCrit(double rate, boolean skill, L2Character target)
|
||||
public static final boolean calcCrit(L2Character attacker, L2Character target, Skill skill)
|
||||
{
|
||||
double finalRate = target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE, rate, null, null) + target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE_ADD, 0, null, null);
|
||||
return finalRate > Rnd.get(1000);
|
||||
double rate = 0.d;
|
||||
if (skill != null)
|
||||
{
|
||||
rate = skill.getBaseCritRate() * 10 * BaseStats.STR.calcBonus(attacker);
|
||||
}
|
||||
else
|
||||
{
|
||||
rate = (int) attacker.getStat().calcStat(Stats.CRITICAL_RATE_POS, attacker.getStat().getCriticalHit(target, null));
|
||||
}
|
||||
return (target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE, rate, null, null) + target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE_ADD, 0, null, null)) > Rnd.get(1000);
|
||||
}
|
||||
|
||||
public static final boolean calcMCrit(double mRate)
|
||||
@@ -1740,35 +1753,21 @@ public final class Formulas
|
||||
public static double calcAttributeBonus(L2Character attacker, L2Character target, Skill skill)
|
||||
{
|
||||
int attack_attribute;
|
||||
int defence_attribute;
|
||||
|
||||
if (skill != null)
|
||||
{
|
||||
if (skill.getElement() == -1)
|
||||
if ((skill.getElement() == -1) || (attacker.getAttackElement() != skill.getElement()))
|
||||
{
|
||||
attack_attribute = 0;
|
||||
defence_attribute = target.getDefenseElementValue((byte) -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (attacker.getAttackElement() == skill.getElement())
|
||||
{
|
||||
attack_attribute = attacker.getAttackElementValue(attacker.getAttackElement()) + skill.getElementPower();
|
||||
defence_attribute = target.getDefenseElementValue(attacker.getAttackElement());
|
||||
}
|
||||
else
|
||||
{
|
||||
attack_attribute = skill.getElementPower();
|
||||
defence_attribute = target.getDefenseElementValue(skill.getElement());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
attack_attribute = attacker.getAttackElementValue(attacker.getAttackElement()) + skill.getElementPower();
|
||||
}
|
||||
else
|
||||
{
|
||||
attack_attribute = attacker.getAttackElementValue(attacker.getAttackElement());
|
||||
defence_attribute = target.getDefenseElementValue(attacker.getAttackElement());
|
||||
}
|
||||
|
||||
int defence_attribute = target.getDefenseElementValue(attacker.getAttackElement());
|
||||
|
||||
double attack_attribute_mod = 0;
|
||||
double defence_attribute_mod = 0;
|
||||
|
||||
|
@@ -55,9 +55,9 @@ public enum Stats
|
||||
MAGIC_REUSE_RATE("mReuse"), // Magic Skill Reuse Rate
|
||||
DANCE_REUSE("dReuse"), // Dance Skill Reuse Rate
|
||||
SHIELD_DEFENCE("sDef"),
|
||||
CRITICAL_DAMAGE("cAtk"),
|
||||
CRITICAL_DAMAGE_POSITION("cAtkPos"),
|
||||
CRITICAL_DAMAGE_ADD("cAtkAdd"), // this is another type for special critical damage mods - vicious stance, critical power and critical damage SA
|
||||
CRITICAL_DAMAGE("critDmg"),
|
||||
CRITICAL_DAMAGE_POS("critDmgPos"),
|
||||
CRITICAL_DAMAGE_ADD("critDmgAdd"), // this is another type for special critical damage mods - vicious stance, critical power and critical damage SA
|
||||
MAGIC_CRIT_DMG("mCritPower"),
|
||||
MAGIC_CRIT_DMG_ADD("mCritPowerAdd"),
|
||||
MOMENTUM_SKILL_POWER("momentumSkillPower"),
|
||||
@@ -86,7 +86,8 @@ public enum Stats
|
||||
DEFENCE_CRITICAL_DAMAGE("defCritDamage"),
|
||||
DEFENCE_CRITICAL_DAMAGE_ADD("defCritDamageAdd"), // Resistance to critical damage in value (Example: +100 will be 100 more critical damage, NOT 100% more).
|
||||
SHIELD_RATE("rShld"),
|
||||
CRITICAL_RATE("rCrit"),
|
||||
CRITICAL_RATE("critRate"),
|
||||
CRITICAL_RATE_POS("critRatePos"),
|
||||
MAX_PHYS_CRIT_RATE("maxPhysCritRate"),
|
||||
BLOW_RATE("blowRate"),
|
||||
MCRITICAL_RATE("mCritRate"),
|
||||
@@ -169,18 +170,18 @@ public enum Stats
|
||||
// ExSkill
|
||||
INV_LIM("inventoryLimit"),
|
||||
WH_LIM("whLimit"),
|
||||
FREIGHT_LIM("FreightLimit"),
|
||||
P_SELL_LIM("PrivateSellLimit"),
|
||||
P_BUY_LIM("PrivateBuyLimit"),
|
||||
REC_D_LIM("DwarfRecipeLimit"),
|
||||
REC_C_LIM("CommonRecipeLimit"),
|
||||
FREIGHT_LIM("freightLimit"),
|
||||
P_SELL_LIM("privateSellLimit"),
|
||||
P_BUY_LIM("privateBuyLimit"),
|
||||
REC_D_LIM("dwarfRecipeLimit"),
|
||||
REC_C_LIM("commonRecipeLimit"),
|
||||
|
||||
// C4 Stats
|
||||
PHYSICAL_MP_CONSUME_RATE("PhysicalMpConsumeRate"),
|
||||
MAGICAL_MP_CONSUME_RATE("MagicalMpConsumeRate"),
|
||||
DANCE_MP_CONSUME_RATE("DanceMpConsumeRate"),
|
||||
BOW_MP_CONSUME_RATE("BowMpConsumeRate"),
|
||||
MP_CONSUME("MpConsume"),
|
||||
PHYSICAL_MP_CONSUME_RATE("physicalMpConsumeRate"),
|
||||
MAGICAL_MP_CONSUME_RATE("magicalMpConsumeRate"),
|
||||
DANCE_MP_CONSUME_RATE("danceMpConsumeRate"),
|
||||
BOW_MP_CONSUME_RATE("bowMpConsumeRate"),
|
||||
MP_CONSUME("mpConsume"),
|
||||
|
||||
// Shield Stats
|
||||
SHIELD_DEFENCE_ANGLE("shieldDefAngle"),
|
||||
|
Reference in New Issue
Block a user