Index: java/net/sf/l2j/gameserver/skills/Formulas.java =================================================================== --- java/net/sf/l2j/gameserver/skills/Formulas.java (revision 835) +++ java/net/sf/l2j/gameserver/skills/Formulas.java (working copy) @@ -1413,22 +1413,31 @@ } rate = value; break; + case POISON: + case BLEED: + value = 3000 + (int) (7000 * ((float) skill.getLevel() / maxLevel)); + modifier = 10 * target.getCON() / 3; + if (modifier > 0) value /= modifier; + value *= ssmodifier; + value /= 100; + break; case MDOT: case MANADAM: case CONFUSION: - mAtk = player.getMAtk(target, skill); - mDef = target.getMDef(player, skill); - value = 3000 + (int) (7000 * ((float) skill.getLevel() / maxLevel)); - if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef; - modifier = 20 * target.getMEN() / 3; - //_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel()); - break; case MUTE: + case DEBUFF: + case WEAKNESS: + case BETRAY: + case AGGREDUCE_CHAR: + case FEAR: mAtk = player.getMAtk(target, skill); mDef = target.getMDef(player, skill); value = 3000 + (int) (7000 * ((float) skill.getLevel() / maxLevel)); if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef; modifier = 20 * target.getMEN() / 3; + if (modifier > 0) value /= modifier; + value *= ssmodifier; + value /= 100; //_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel()); break; case MDAM: @@ -1477,7 +1486,7 @@ value = 5000 + (int) (5000 * ((float) skill.getLevel() / maxLevel)); mDef = target.calcStat(Stats.ROOT_RES, mDef, target, null); if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef; - modifier = 10 * target.getDEX() / 3; + modifier = 10 * target.getMEN() / 3; if (modifier > 0) value /= modifier; value *= ssmodifier; value /= 100; @@ -1570,12 +1579,15 @@ case SLEEP: return (int) target.calcStat(Stats.SLEEP_RES, 0, target, null); case MUTE: - return (int) target.calcStat(Stats.MUTE_RES, 0, target, null); case FEAR: + case BETRAY: + case AGGREDUCE_CHAR: + return (int) target.calcStat(Stats.DERANGEMENT_RES, 0, target, null); case CONFUSION: return (int) target.calcStat(Stats.CONFUSION_RES, 0, target, null); - case CANCEL: - return (int) target.calcStat(Stats.CONFUSION_RES, 0, target, null); + case DEBUFF: + case WEAKNESS: + return (int) target.calcStat(Stats.DEBUFF_RES, 0, target, null); default: return 0; } @@ -1587,13 +1599,20 @@ switch (type) { case STUN: + case BLEED: + case POISON: return (int) (Math.sqrt(CONbonus[target.getCON()]) * 100 - 100); - case ROOT: - return (int) (Math.sqrt(DEXbonus[target.getDEX()]) * 100 - 100); case SLEEP: return (int) (Math.sqrt(WITbonus[target.getWIT()]) * 100 - 100); + case DEBUFF: + case WEAKNESS: + case ERASE: + case ROOT: case MUTE: + case FEAR: + case BETRAY: case CONFUSION: + case AGGREDUCE_CHAR: case PARALYZE: return (int) (Math.sqrt(MENbonus[target.getMEN()]) * 100 - 100); default: Index: java/net/sf/l2j/gameserver/skills/Stats.java =================================================================== --- java/net/sf/l2j/gameserver/skills/Stats.java (revision 835) +++ java/net/sf/l2j/gameserver/skills/Stats.java (working copy) @@ -113,8 +113,7 @@ PARALYZE_RES ("paralyzeRes"), ROOT_RES ("rootRes"), SLEEP_RES ("sleepRes"), - CONFUSION_RES ("confusionRes"), - MUTE_RES ("muteRes"), + CONFUSION_RES ("confusionRes"), MOVEMENT_RES ("movementRes"), FIRE_RES ("fireRes"), WIND_RES ("windRes"), @@ -123,6 +122,8 @@ HOLY_RES ("holyRes"), DARK_RES ("darkRes"), CANCEL_RES ("cancelRes"), // Resistance for cancel type skills + DERANGEMENT_RES ("derangementRes"), + DEBUFF_RES ("debuffRes"), NONE_WPN_RES ("noneWpnRes"), // Shields!!! SWORD_WPN_RES ("swordWpnRes"),