Помогите Необходима нормальная формула шанса для дропа.

cephalopoid

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
cephalopoid
Здравствуйте. Решил впервые отредачить чужой плагин для себя, и столкнулся с проблемой. Мне кажется, формула, используемая в плагине, неправильная 🙂D). Дело в том, что когда я ввожу в конфиг, допустим, шанс "0,1", тестирую дроп, затем ввожу "0,001", то по ощущениям, они ничем не отличаются.
Скажите, правильная ли это формула, а если нет, напишите правильную, плез)

P.S. Занимаюсь я этим впервые, и в кодинге не шарю. Не бросайтесь тапками)
1.15.1
Часть кода:
Код:
        } else if (livingEntity.getType() == EntityType.ELDER_GUARDIAN) {
            Random rand = new Random();
            int number = rand.nextInt(100) + 1;
            if (number <= main.plugin.getConfig().getInt("ELDER_GUARDIAN_SPAWN_EGG_Chance")) {
              if (main.plugin.getConfig().getBoolean("TITLE")) {
                TitleAPI.sendTitle(kill, main.plugin.getConfig().getString("DropTitle").replaceAll("&", "§"), 20, 60, 20);
                TitleAPI.sendSubTitle(kill, main.plugin.getConfig().getString("ELDER_GUARDIAN_SPAWN_EGG_SubTitle").replaceAll("&", "§"), 20, 20, 20);
              }

Конфигурация:
Код:
#   Settings for ELDER GUARDIAN
ELDER_GUARDIAN_SPAWN_EGG_SubTitle: '&7Найдено яйцо: &fДревний страж'
ELDER_GUARDIAN_SPAWN_EGG_MSG: '&7Вы нашли яйцо призыва: &fДревний страж'
ELDER_GUARDIAN_SPAWN_EGG_Chance: 0,001
ELDER_GUARDIAN_SPAWN_EGG_Drop_Amount: 1
 
У тебя идет так: зарандомить число от 1 до 100 (number), потом идет условие: если number меньше (или равно) твоего шанса из конфига ((double 0.001) переводим в Integer будет 1 если не ошибаюсь) , тогда выполняем код...
Хоть шанс 0.0000000...1 ставь , в итоге всеравно будет один к стам.
Чтобы уменьшить шанс надо увеличивать N
Код:
int number = rand.nextInt(N) + 1;
Чтобы шанс был 1 к 1000 надо так:
Код:
int number = rand.nextInt(1000) + 1;
В итоге имеем: N - выставляем в зависимости от того, насколько маленький шанс хотим получить.
А chance присваиваем ЦЕЛОЕ число, которое является желаемым процентом от N.
Например N = 1000; chance = 70, получаем 7% вероятности. Если N = 10000 , то уже 0,7%
 
Последнее редактирование:
У тебя идет так: зарандомить число от 1 до 100 (number), потом идет условие: если number меньше (или равно) твоего шанса из конфига ((double 0.001) переводим в Integer будет 1 если не ошибаюсь) , тогда выполняем код...
Хоть шанс 0.0000000...1 ставь , в итоге всеравно будет один к стам.
Чтобы уменьшить шанс надо увеличивать N
Код:
int number = rand.nextInt(N) + 1;
Чтобы шанс был 1 к 1000 надо так:
Код:
int number = rand.nextInt(1000) + 1;
В итоге имеем: N - выставляем в зависимости от того, насколько маленький шанс хотим получить.
А chance присваиваем ЦЕЛОЕ число, которое является желаемым процентом от N.
Например N = 1000; chance = 70, получаем 7% вероятности. Если N = 10000 , то уже 0,7%
Получается, чтобы шанс выпадения был "0,1", надо выставить в N 10000, а шанс в конфиге - 10?
А можно сделать так, чтобы шанс был ровно таким же, какой указан в конфиге? Вот поставил ты, допустим, "0,1", и с таким же шансом будет дроп. Без указания целых чисел процента от N.
 
Получается, чтобы шанс выпадения был "0,1", надо выставить в N 10000, а шанс в конфиге - 10?
А можно сделать так, чтобы шанс был ровно таким же, какой указан в конфиге? Вот поставил ты, допустим, "0,1", и с таким же шансом будет дроп. Без указания целых чисел процента от N.
rand.nextInt(1000) = твои 0.1. Все просто же.
 
Назад
Верх