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;