|
@@ -1822,6 +1822,7 @@ public final class Formulas
|
|
|
multiplier = target.calcStat(Stats.DERANGEMENT_VULN, multiplier, target, null);
|
|
|
break;
|
|
|
case CONFUSION:
|
|
|
+ case CONFUSE_MOB_ONLY:
|
|
|
multiplier = target.calcStat(Stats.CONFUSION_VULN, multiplier, target, null);
|
|
|
break;
|
|
|
case DEBUFF:
|
|
@@ -1857,6 +1858,7 @@ public final class Formulas
|
|
|
case FEAR:
|
|
|
case BETRAY:
|
|
|
case CONFUSION:
|
|
|
+ case CONFUSE_MOB_ONLY:
|
|
|
case AGGREDUCE_CHAR:
|
|
|
case PARALYZE:
|
|
|
multiplier = 2 - Math.sqrt(MENbonus[target.getMEN()]);
|
|
@@ -1869,8 +1871,7 @@ public final class Formulas
|
|
|
return multiplier;
|
|
|
}
|
|
|
|
|
|
- public boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, boolean ss,
|
|
|
- boolean sps, boolean bss)
|
|
|
+ public boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, boolean ss, boolean sps, boolean bss)
|
|
|
{
|
|
|
SkillType type = skill.getSkillType();
|
|
|
|
|
@@ -1909,8 +1910,8 @@ public final class Formulas
|
|
|
|
|
|
// TODO: Temporary fix for NPC skills with MagicLevel not set
|
|
|
// int lvlmodifier = (skill.getMagicLevel() - target.getLevel()) * lvlDepend;
|
|
|
- int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()) - target.getLevel())
|
|
|
- * lvlDepend;
|
|
|
+ int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()) - target.getLevel()) * lvlDepend;
|
|
|
+
|
|
|
double statmodifier = calcSkillStatModifier(type, target);
|
|
|
double resmodifier = calcSkillVulnerability(target, skill);
|
|
|
|
|
@@ -1919,20 +1920,26 @@ public final class Formulas
|
|
|
else if (sps) ssmodifier = 150;
|
|
|
else if (ss) ssmodifier = 150;
|
|
|
|
|
|
- int rate = (int) ((value * statmodifier + lvlmodifier) * resmodifier);
|
|
|
- if (skill.isMagic())
|
|
|
- rate = (int) (rate * Math.pow((double) attacker.getMAtk(target, skill)
|
|
|
- / target.getMDef(attacker, skill), 0.2));
|
|
|
+ // Calculate BaseRate.
|
|
|
+ int rate = (int) ((value * statmodifier + lvlmodifier));
|
|
|
|
|
|
- if (rate > 99) rate = 99;
|
|
|
- else if (rate < 1) rate = 1;
|
|
|
+ // Add Matk/Mdef Bonus
|
|
|
+ if (skill.isMagic())
|
|
|
+ rate = (int) (rate * Math.pow((double) attacker.getMAtk(target, skill) / target.getMDef(attacker, skill), 0.2));
|
|
|
|
|
|
+ // Add Bonus for Sps/SS
|
|
|
if (ssmodifier != 100)
|
|
|
{
|
|
|
if (rate > 10000 / (100 + ssmodifier)) rate = 100 - (100 - rate) * 100 / ssmodifier;
|
|
|
else rate = rate * ssmodifier / 100;
|
|
|
}
|
|
|
|
|
|
+ if (rate > 99) rate = 99;
|
|
|
+ else if (rate < 1) rate = 1;
|
|
|
+
|
|
|
+ //Finaly apply resists.
|
|
|
+ rate *= resmodifier;
|
|
|
+
|
|
|
if (Config.DEVELOPER)
|
|
|
_log.info(skill.getName()
|
|
|
+ ": "
|