From da9d1a3744c044db99fa986f61cd8396b07ac1c5 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 1 Sep 2015 19:15:59 +0000 Subject: [PATCH] Focus Death/Power formula. Contributed by Sahar. --- .../game/data/stats/skills/00300-00399.xml | 30 +++++++++---------- trunk/dist/game/data/xsd/skills.xsd | 1 + .../data_classic/stats/skills/00300-00399.xml | 30 +++++++++---------- trunk/dist/game/data_classic/xsd/skills.xsd | 1 + .../gameserver/model/stats/Formulas.java | 10 +++++-- .../gameserver/model/stats/Stats.java | 1 + .../model/stats/functions/FuncMul.java | 6 ---- 7 files changed, 40 insertions(+), 39 deletions(-) diff --git a/trunk/dist/game/data/stats/skills/00300-00399.xml b/trunk/dist/game/data/stats/skills/00300-00399.xml index c5522c428a..c223a48d3b 100644 --- a/trunk/dist/game/data/stats/skills/00300-00399.xml +++ b/trunk/dist/game/data/stats/skills/00300-00399.xml @@ -1879,10 +1879,10 @@ - + - + @@ -1891,10 +1891,10 @@ - + - + @@ -1903,10 +1903,10 @@ - + - + @@ -2005,48 +2005,48 @@ - + - + - + - + - + - + - + - + - + diff --git a/trunk/dist/game/data/xsd/skills.xsd b/trunk/dist/game/data/xsd/skills.xsd index 1af15a95c3..e74e88d586 100644 --- a/trunk/dist/game/data/xsd/skills.xsd +++ b/trunk/dist/game/data/xsd/skills.xsd @@ -292,6 +292,7 @@ + diff --git a/trunk/dist/game/data_classic/stats/skills/00300-00399.xml b/trunk/dist/game/data_classic/stats/skills/00300-00399.xml index 731a719649..208a8f92bc 100644 --- a/trunk/dist/game/data_classic/stats/skills/00300-00399.xml +++ b/trunk/dist/game/data_classic/stats/skills/00300-00399.xml @@ -1825,10 +1825,10 @@ - + - + @@ -1837,10 +1837,10 @@ - + - + @@ -1849,10 +1849,10 @@ - + - + @@ -1951,48 +1951,48 @@ - + - + - + - + - + - + - + - + - + diff --git a/trunk/dist/game/data_classic/xsd/skills.xsd b/trunk/dist/game/data_classic/xsd/skills.xsd index 1af15a95c3..e74e88d586 100644 --- a/trunk/dist/game/data_classic/xsd/skills.xsd +++ b/trunk/dist/game/data_classic/xsd/skills.xsd @@ -292,6 +292,7 @@ + diff --git a/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java b/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java index a4a4f4db43..cf1547f1bb 100644 --- a/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java +++ b/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java @@ -531,6 +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 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); @@ -554,7 +555,7 @@ public final class Formulas } } - damage = (baseMod * criticalMod * criticalVulnMod * proximityBonus * pvpBonus) + criticalAddMod + criticalAddVuln; + damage = (baseMod * criticalMod * criticalModPos * criticalVulnMod * proximityBonus * pvpBonus) + criticalAddMod + criticalAddVuln; damage *= weaponTraitMod; damage *= generalTraitMod; damage *= attributeMod; @@ -570,6 +571,7 @@ public final class Formulas set.set("pvpBonus", pvpBonus); set.set("baseMod", baseMod); set.set("criticalMod", criticalMod); + set.set("criticalModPos", criticalModPos); set.set("criticalVulnMod", criticalVulnMod); set.set("criticalAddMod", criticalAddMod); set.set("criticalAddVuln", criticalAddVuln); @@ -621,6 +623,7 @@ 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 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); @@ -644,7 +647,7 @@ public final class Formulas } - damage = (baseMod * criticalMod * criticalVulnMod * proximityBonus * pvpBonus) + criticalAddMod + criticalAddVuln; + damage = (baseMod * criticalMod * criticalModPos * criticalVulnMod * proximityBonus * pvpBonus) + criticalAddMod + criticalAddVuln; damage *= generalTraitMod; damage *= attributeMod; damage *= weaponMod; @@ -659,6 +662,7 @@ public final class Formulas set.set("pvpBonus", pvpBonus); set.set("baseMod", baseMod); set.set("criticalMod", criticalMod); + set.set("criticalModPos", criticalModPos); set.set("criticalVulnMod", criticalVulnMod); set.set("criticalAddMod", criticalAddMod); set.set("criticalAddVuln", criticalAddVuln); @@ -755,7 +759,7 @@ public final class Formulas if (crit) { // Finally retail like formula - damage = 2 * attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, null) * ((70 * damage) / (defence * reduceDef)); + 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)); damage += target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill); diff --git a/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java b/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java index d3795fa006..7139e8949a 100644 --- a/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java +++ b/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java @@ -56,6 +56,7 @@ public enum Stats 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 MAGIC_CRIT_DMG("mCritPower"), MAGIC_CRIT_DMG_ADD("mCritPowerAdd"), diff --git a/trunk/java/com/l2jserver/gameserver/model/stats/functions/FuncMul.java b/trunk/java/com/l2jserver/gameserver/model/stats/functions/FuncMul.java index b6dca31db0..973ca42228 100644 --- a/trunk/java/com/l2jserver/gameserver/model/stats/functions/FuncMul.java +++ b/trunk/java/com/l2jserver/gameserver/model/stats/functions/FuncMul.java @@ -39,12 +39,6 @@ public class FuncMul extends AbstractFunction { if ((getApplayCond() == null) || getApplayCond().test(effector, effected, skill)) { - // Focus Death/Power fix by Sahar. - if ((getStat() == Stats.CRITICAL_DAMAGE) && (skill != null) && ((skill.getId() == 355) || (skill.getId() == 357))) - { - return initVal * (1 + ((getValue() - 1) / 2)); - } - return initVal * getValue(); } return initVal;