rendered paste body // 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;
}