case SLEEP: mAtk = player.getMAtk(target, skill); mDef = target.getMDef(player, skill); value = 30 * 100 + (int)(70 * 100 * ((float)skill.getLevel()/maxLevel)); mDef = target.calcStat(Stats.SLEEP_RES,mDef,target,null); if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk/mDef; modifier = 100 * target.getWIT()/15; //_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel()); break; ............................ if (modifier == 0) { _log.warning("Name: "+target.getName()+" has bad base stat value. Fix datapack or notify dp ppl"); modifier = 1; } rate = ((player.getLevel() - target.getLevel()) + (int)(value / modifier)); //_log.fine(player.getName()+" rate:"+rate); if (rate > 100) rate = 100; else if (rate < 0) rate = 0; if (check > rate) success = false; else success = true; return success;