public boolean calcBlueSkillSuccess(L2Character activeChar, L2Character target, L2Skill skill) { int atk = activeChar.getPAtk(activeChar); int def = 0; int modifier = 0; int rate = 0; int rateMin = _rnd.nextInt(100); switch (skill.getSkillType()) { case STUN: def = target.getMDef(target, skill); modifier = target.getWIT(); break; case ROOT: def = target.getMDef(target, skill); modifier = target.getDEX(); break; case PARALYZE: def = target.getPDef(target); modifier = target.getWIT(); break; case SLEEP: def = target.getMDef(target, skill); modifier = target.getWIT(); break; default: def = target.getPDef(target); modifier = target.getCON(); break; } def = _rnd.nextInt(modifier) * (def / modifier); rate = (atk - def) / (atk + def); if (rate > 100) rate = 100; // We shouldn't have more than 100% success rate if (rate < 1) rate = 1; // We shouldn't have less than 1% success rate return (rateMin <= rate); }