public boolean calcBlueSkillSuccess(L2Character activeChar, L2Character target, L2Skill skill) { int atk = 0; int def = 0; int modifier = 0; switch (skill.getSkillType()) { case STUN: atk = activeChar.getPAtk(activeChar); def = target.getPDef(target); modifier = target.getWIT(); break; case ROOT: atk = activeChar.getMAtk(activeChar, skill); def = target.getMDef(target, skill); modifier = target.getDEX(); break; case PARALYZE: atk = activeChar.getPAtk(activeChar); def = target.getPDef(target); modifier = target.getWIT(); break; case SLEEP: atk = activeChar.getMAtk(activeChar, skill); def = target.getMDef(target, skill); modifier = target.getWIT(); break; default: atk = activeChar.getPAtk(activeChar); def = target.getPDef(target); modifier = target.getCON(); break; } def = _rnd.nextInt(modifier) * (def / modifier); double rateMin = _rnd.nextInt(100); // Minimum success rate required double rate = ((double)(atk - def) / (double)(atk + def)) * 100.0; // Actual success rate 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 String msg = skill.getName() + " success rate: " + (int)rate + "/" + (int)rateMin; if (activeChar instanceof L2PcInstance) ((L2PcInstance)activeChar).sendMessage(msg); if (target instanceof L2PcInstance) ((L2PcInstance)target).sendMessage(msg); return (rateMin <= rate); }