double Player::getLostPercent() const
{
std::bitset<5> bitset(blessings);
const int32_t deathLosePercent = g_config.getNumber(ConfigManager::DEATH_LOSE_PERCENT);
if (deathLosePercent != -1) {
int32_t lossPercent = deathLosePercent;
if (isPromoted()) {
lossPercent -= 3;
}
lossPercent -= (int32_t)bitset.count();
return std::max<int32_t>(0, lossPercent) / (double)100;
} else {
double lossPercent;
if (level >= 25) {
double tmpLevel = level + (levelPercent / 100.);
lossPercent = (double)((tmpLevel + 50) * 40 * ((tmpLevel * tmpLevel) - (5 * tmpLevel) + 8)) / experience;
} else {
lossPercent = 10;
}
if (isPromoted()) {
lossPercent *= 0.7;
}
return lossPercent * pow(0.92, (int32_t)bitset.count()) / 100;
}
}