// init vars boolean canSpoilLowerLevel = Config.CAN_SPOIL_LOWER_LEVEL_MOBS; boolean canDelevelToSpoil = Config.CAN_DELEVEL_AND_SPOIL_MOBS; boolean spoil = false; boolean wasNegative = false; boolean delevelledPlayer = false; double x = 0; double lvlDifference = 0; double rateOfSpoil = 0; double maxLevelDifference = Config.MAXIMUM_PLAYER_AND_MOB_LEVEL_DIFFERENCE; double baseRateOfSpoil = Config.BASE_SPOIL_RATE; double minimumRateOfSpoil = Config.MINIMUM_SPOIL_RATE; double spoilLevelLimit = Config.SPOIL_LEVEL_DIFFERENCE_LIMIT; int maxLevelOfSpoil = Config.LAST_LEVEL_SPOIL_IS_LEARNED; int mobLevel = target.getLevel(); int playerLevel = activeChar.getLevel(); int spoilCheck = 0; int spoilLevelANDPlayerLevelDifference = 0; Random rand = new Random(); // first make sure target mob is alive if ( target.isDead() == false ) { lvlDifference = mobLevel - playerLevel; // rate of spoil x = lvlDifference / maxLevelDifference; if ( x < 0 ) { x *= -1; wasNegative = true; } if ( canSpoilLowerLevel == true && wasNegative ) { rateOfSpoil = baseRateOfSpoil; } else { if ( x > 1 ) x = 1; rateOfSpoil = baseRateOfSpoil * ( 1 - Math.pow(x, 2) ); if ( rateOfSpoil < minimumRateOfSpoil ) rateOfSpoil = minimumRateOfSpoil; } if ( playerLevel > maxLevelOfSpoil ) playerLevel = maxLevelOfSpoil; // essentially somewhere above i need to get spoilCheck which is the MIN_LEVEL that the skill used (spoil) is learned at spoilLevelANDPlayerLevelDifference = playerLevel - spoilCheck; if ( spoilLevelANDPlayerLevelDifference < 0 ) { if ( canDelevelToSpoil ) delevelledPlayer = true; else { spoilLevelANDPlayerLevelDifference *= -1; delevelledPlayer = false; } } if ( spoilLevelANDPlayerLevelDifference > spoilLevelLimit && !delevelledPlayer ) { spoilLevelANDPlayerLevelDifference /= spoilLevelLimit; if ( spoilLevelANDPlayerLevelDifference < 0 ) spoilLevelANDPlayerLevelDifference *= -1; if ( spoilLevelANDPlayerLevelDifference > 1 ) spoilLevelANDPlayerLevelDifference = 1; double rateOfSpoilMultiplier = (baseRateOfSpoil * ( 1 - Math.pow(spoilLevelANDPlayerLevelDifference, 2) ))/100; rateOfSpoil *= rateOfSpoilMultiplier; if ( rateOfSpoil < minimumRateOfSpoil ) rateOfSpoil = minimumRateOfSpoil; } // now do randomization int randomSuccessRate = rand.nextInt(99); if ( randomSuccessRate < rateOfSpoil ) spoil = true; }