1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем cephalopoid, 1 янв 2020.

  1. Автор темы
    cephalopoid

    cephalopoid Активный участник Пользователь

    Баллы:
    76
    Здравствуйте. Решил впервые отредачить чужой плагин для себя, и столкнулся с проблемой. Мне кажется, формула, используемая в плагине, неправильная :)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
    
     
  2. NoooobKa

    NoooobKa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    У тебя идет так: зарандомить число от 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%
     
    Последнее редактирование: 2 янв 2020
  3. Автор темы
    cephalopoid

    cephalopoid Активный участник Пользователь

    Баллы:
    76
    Получается, чтобы шанс выпадения был "0,1", надо выставить в N 10000, а шанс в конфиге - 10?
    А можно сделать так, чтобы шанс был ровно таким же, какой указан в конфиге? Вот поставил ты, допустим, "0,1", и с таким же шансом будет дроп. Без указания целых чисел процента от N.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    rand.nextInt(1000) = твои 0.1. Все просто же.
     
  5. Автор темы
    cephalopoid

    cephalopoid Активный участник Пользователь

    Баллы:
    76
    А, только сейчас дошло. Эх, похоже, я слишком глуп для этого. Спасибо большое за ответы)
     

Поделиться этой страницей