Войти на сайт

Авторизация, ждите ...
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

ТЕМА: Выпад предмета по вероятности.

Выпад предмета по вероятности. 4 года 2 мес. назад #119320

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Здравствуйте.
Нужна помощь.
RPG Maker MZ.
Короче нужно сделать систему выпода предметов с процентной вероятностью на каждый предмет.
Есть идеи как это реализовать?
Делать для каждого предмета несколько чисел и рандомное число использовать. Так конечно можно но делать это методами Мейкера запарно может кто знает вариант получше?
Правильнее по формуле вероятности но я честно это так и не освоил. Не знаю формулы. Но зная формулу смогу написать скрипт.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 4 года 2 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.

Выпад предмета по вероятности. 4 года 2 мес. назад #119321

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • ПаладинОраторПроект месяца 1 местоПроект года 3 место3 место в Обучающем конкурсеУчитель1 место в Обучающем конкурсеРазработчик3 местоПроект года 1 место
Возможно, так. Здесь вариант для пяти предметов. В переменных 1-5 указаны вероятности выпадания каждого в процентах.
◆Переменная:#0001 предмет 1 = 10
◆Переменная:#0002 предмет 2 = 20
◆Переменная:#0003 предмет 3 = 30
◆Переменная:#0004 предмет 4 = 50
◆Переменная:#0005 предмет 5 = 70
◆Переменная:#0006 счётчик = 1
◆Цикл
  ◆Переменная:#0007 вероятность = Случайно 1..100
  ◆Скрипт:if ($gameVariables.value($gameVariables.value(6))>=$gameVariables.value(7))
  :      : { $gameParty.gainItem($dataItems[$gameVariables.value(6)], 1) }
  ◆Переменная:#0006 счётчик += 1
  ◆Если:счётчик ≥ 6
    ◆Прервать цикл
    ◆
  :Конец
  ◆
:Повторить цикл
Последнее редактирование: 4 года 2 мес. назад от Alx_Yago.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: WhitePaper, LiRo

Выпад предмета по вероятности. 4 года 2 мес. назад #119330

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Проблема в том что данная система завязана на номер переменной равен номеру предмета но у меня мало того что предметы в хаотичном порядке так еще и переменные некоторые для таких предметов заняты но тут не только в этом. Нужно думаю без радома чисто по вероятности.
И только если вероятность совпадает то рандомно тогда например у некоторых предметов вероятность может совпадать и тогда рандомно.
А так нужно по вероятности например для зелий лечений 90 процентов шанса что выпадет именно оно и дальше по уменьшению
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

Выпад предмета по вероятности. 4 года 2 мес. назад #119332

  • Демий
  • Демий аватар
  • Вне сайта
  • Модератор
  • Здесь могла быть ваша реклама
  • Сообщений: 1597
  • Спасибо получено: 1520
  • 3 местоВетеранРазработчик1 место в ГотвУчительТестер3 место ГотвПисатель 2 место
Я бы использовал для этого дела заметки у предметов. Пишешь туда шанс выпадения и когда сундук открываешь, определяешь вероятность, ищешь предметы с нужным шансом - выдаешь.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Alx_Yago

Выпад предмета по вероятности. 4 года 2 мес. назад #119333

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • ПаладинОраторПроект месяца 1 местоПроект года 3 место3 место в Обучающем конкурсеУчитель1 место в Обучающем конкурсеРазработчик3 местоПроект года 1 место
Alexandr_7 пишет:
Проблема в том что данная система завязана на номер переменной равен номеру предмета но у меня мало того что предметы в хаотичном порядке так еще и переменные некоторые для таких предметов заняты но тут не только в этом. Нужно думаю без радома чисто по вероятности.
И только если вероятность совпадает то рандомно тогда например у некоторых предметов вероятность может совпадать и тогда рандомно.
А так нужно по вероятности например для зелий лечений 90 процентов шанса что выпадет именно оно и дальше по уменьшению
Никаких проблем с тем, чтобы сделать сдвиг пула переменных относительно номеров предметов, а тем предметам, которые не должны выпадать, сделать вероятность =0.
Вообще рандом и вероятность это примерно одно и то же. Объяснишь подробнее, или с примером, как это должно происходить в твоём понимании? Честно, я не очень понял про "если вероятность совпадает, то рандомно".

Вариант Демия с заметками у предметов тоже нормальный, удобный даже, однако с переменными можно делать больше всяких вещей, например менять вероятности по ходу игры, или региону, создавая таким образом дефицит или избыток определённых предметов.
Администратор запретил публиковать записи гостям.

Выпад предмета по вероятности. 4 года 2 мес. назад #119336

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Короче нужно сделать такую систему чтобы некоторые предметы выпадали чаще, некоторые реже а некоторые так вообще очень редко и иногда так вообще предметы не выподали.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 4 года 2 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.

Выпад предмета по вероятности. 4 года 2 мес. назад #119337

  • Демий
  • Демий аватар
  • Вне сайта
  • Модератор
  • Здесь могла быть ваша реклама
  • Сообщений: 1597
  • Спасибо получено: 1520
  • 3 местоВетеранРазработчик1 место в ГотвУчительТестер3 место ГотвПисатель 2 место
Короче, простой вариант. Пишем в массив айди предметов, которые должны выпадать. Любым удобным способом. Те, что частые - по три четыре раза пишем, те что редкие два, а ультра редкие, один. Ну это к примеру.
Игрок должен получить предмет? Получаем случайный элемент массива как айди предмета, что надо ему дать.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: LiRo

Выпад предмета по вероятности. 4 года 2 мес. назад #119347

  • DyxEather
  • DyxEather аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 43
  • Спасибо получено: 20
Если надо привязать дроп к конкретному монстру или сундуку. То делаем список предметов которые выпадают из него.
У каждого предмета делаем множитель дропа. Например, золото х50, легендарный меч х1. И уже при убийстве моба вызывать событие дропа. Рандомизировать и перемножать бросок "кубика" на шанс дропа. Уже в соответствии с полученным давать тот или иной дроп.
Мы убили монстра: выпало 20, то есть получаем 20х50=1000. То есть в 10 раз больше чем 100%. То есть у нас будет 10 монет, а не 1. Но 20х1... даст 20 для дропа легендарного меча увы не хватает. Но амулет имеет х5 и он выпадает.

В принципе сделать такую систему не будет трудно, на скриптах точно (хотя я не уверен ибо скрипты не знаю).
Что это даст:
1. динамически выдавать дроп, а не прописывать конкретно.
2. Позволит изменять "вес" предмета не меняя ВСЕ события с их выпадением. Если прописать множитель в примечании и цеплять скриптом из него.
Администратор запретил публиковать записи гостям.

Выпад предмета по вероятности. 4 года 2 мес. назад #119351

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Демий пишет:
Короче, простой вариант. Пишем в массив айди предметов, которые должны выпадать. Любым удобным способом. Те, что частые - по три четыре раза пишем, те что редкие два, а ультра редкие, один. Ну это к примеру.
Игрок должен получить предмет? Получаем случайный элемент массива как айди предмета, что надо ему дать.
Можно но я запарюсь это делать учитывая что игрой массивы не предусмотрены только через скрипт. В принципе может плагин себе написать. Кокрас для работы с командами плагинов MZ. Наверное напишу.
Только с кодом могут быть проблемы. Вообще напишите кто знаком с JS как там сделать такое чтобы некоторое число выпадало чаще чем другие. Короче речь о том чтобы создать плагин указываешь ИД предмета и вероятность выпадения. Нужно создать массив по этим данным и уже рандомно из количества данных массива выбирать.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

Выпад предмета по вероятности. 4 года 2 мес. назад #119355

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Вроде с помощью ДК написал плагин
Код плагина [ Нажмите, чтобы развернуть ]

Не уверен будет ли это работать и плагин чисто для MZ. пока выкладывать не буду.
Выложил код для людей знающих.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119480

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Прошу помощи. Может кто помочь решить проблему. Точнее допилить плагин:
AL7.getRandomInRange = function (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
/*:
 * @plugindesc AL7_DropItems
 * @author Alexandr_7, DK
 * @target MZ
 * 
 * @param coreDropItems
 * @text Drop Items
 * @desc Drop Items
 * @type struct<sDropItem>[]
 * 
 * @param coreDropWeapons
 * @text Drop Weapons
 * @desc Drop Weapons
 * @type struct<sDropWeapon>[]
 * 
 * @param coreDropArmors
 * @text Drop Armor
 * @desc Drop Armor
 * @type struct<sDropArmor>[]
 * 
 * @command setDrops
 * @text Set Drop Items
 * @desc Set Drop Items
 * 
 * @arg dropItems
 * @text Drop Items
 * @desc Drop Items
 * @type struct<sDropItem>[]
 * 
 * @arg dropWeapons
 * @text Drop Weapons
 * @desc Drop Weapons
 * @type struct<sDropWeapon>[]
 * 
 * @arg dropArmors
 * @text Drop Armor
 * @desc Drop Armor
 * @type struct<sDropArmor>[]
 * 
 * @command getItems
 * @text Get Items
 * @desc Get Items
 * 
 */
 
/*~struct~sDropItem:
 * @param item
 * @text Iitem
 * @desc Iitem
 * @type item
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (0 to 100)
 * @type number
 * @min 0
 * @max 100
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 */
 
 /*~struct~sDropWeapon:
 * @param weapon
 * @text Weapon
 * @desc Weapon
 * @type weapon
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (0 to 100)
 * @type number
 * @min 0
 * @max 100
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 */
 
 /*~struct~sDropArmor:
 * @param armor
 * @text Armor
 * @desc Armor
 * @type armor
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (0 to 100)
 * @type number
 * @min 0
 * @max 100
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 */
 
var Imported = Imported || {};
Imported.AL7_DropItems;
 
if (Imported.AL7_Core === false) {
    throw new Error('No plugin "AL7_Core"! Plugin "AL7_DropItems" will not work!');
}
 
AL7.DropItems = AL7.DropItems || {};
AL7.DropItems.version = 1;
 
AL7.DropItems.param = AL7.AL7PluginManager('AL7_DropItems');
 
AL7.DropItems.allItems = null;
 
AL7.DropItems.concatAllItems = function () {
    AL7.DropItems.param.coreDropItems.forEach(item => { item.type = 'item';});
    AL7.DropItems.param.coreDropWeapons.forEach(item => { item.type = 'weapon';});
    AL7.DropItems.param.coreDropArmors.forEach(item => { item.type = 'armor';});
    AL7.DropItems.allItems = AL7.DropItems.param.coreDropItems.concat(AL7.DropItems.param.coreDropWeapons, AL7.DropItems.param.coreDropArmors);
}
 
AL7.DropItems.concatAllItems();
 
PluginManager.registerCommand("AL7_DropItems", "setDrops", args => {
    AL7.DropItems.param.coreDropItems = AL7.JSONParse(args.dropItems);
    AL7.DropItems.param.coreDropWeapons = AL7.JSONParse(args.dropWeapons);
    AL7.DropItems.param.coreDropArmors = AL7.JSONParse(args.dropArmors);
    AL7.DropItems.concatAllItems();
});
 
PluginManager.registerCommand("AL7_DropItems", "getItems", args => {
    let num = AL7.getRandomInRange(0, 100);
    let listItems = AL7.DropItems.allItems.filter(item => (100 - item.dropProbability) >= num);
    let rndItem = listItems[AL7.getRandomInRange(0, (listItems.length - 1))];
    var countItem = AL7.getRandomInRange(rndItem.countDropMin, rndItem.countDropMax);
    switch (rndItem.type) {
        case 'item':
            $gameParty.gainItem($dataItems[rndItem.item], countItem, false);
            $gameMessage.setSpeakerName('Предмет');
            $gameMessage.setBackground(0);
            $gameMessage.setPositionType(1);
            $gameMessage.add('Найден предмет: \\c[17]\'\\c[1]' + $dataItems[rndItem.item].name + '\\c[17]\' \\c[2]+ \\c[14]' +  String(countItem) + ' \\c[0]ед.');
            break;
        case 'weapon':
            $gameParty.gainItem($dataWeapons[rndItem.weapon], countItem, false);
            $gameMessage.setSpeakerName('Оружие');
            $gameMessage.setBackground(0);
            $gameMessage.setPositionType(1);
            $gameMessage.add('Найдено оружие: \\c[17]\'\\c[1]' + $dataWeapons[rndItem.weapon].name + '\\c[17]\' \\c[2]+ \\c[14]' +  String(countItem) + ' \\c[0]ед.');
            break;
        case 'armor':
                $gameParty.gainItem($dataArmors[rndItem.armor], countItem, false);
                $gameMessage.setSpeakerName('Броня');
                $gameMessage.setBackground(0);
                $gameMessage.setPositionType(1);
                $gameMessage.add('Найдена броня: \\c[17]\'\\c[1]' + $dataArmors[rndItem.armor].name + '\\c[17]\' \\c[2]+ \\c[14]' +  String(countItem) + ' \\c[0]ед.');
                break;
    }
});
Во 1 происходит ошибка иногда. На countDropMin.
Во 2 все нужно чтобы выпад предмета был по вероятности а не рандомно а в этом случае все равно рандомно. К томуже нужно предусматреть чтобы некоторые предметы не падали на протежении определенного количества выпада предмета. Например броня и оружие.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 4 года 2 мес. назад от Alexandr_7.
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119484

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • ПаладинОраторПроект месяца 1 местоПроект года 3 место3 место в Обучающем конкурсеУчитель1 место в Обучающем конкурсеРазработчик3 местоПроект года 1 место
Александр, объясни чем "по вероятности" отличается от "рандомно"?
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119486

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Alx_Yago пишет:
Александр, объясни чем "по вероятности" отличается от "рандомно"?
Вернее мне нужно рандомно но учитывая вероятность чтоб чаще выпадали те предметы у еоторых вероятность выпада выше. Как уже сказал плагин вроде как и отсеивает предметы но выпадают все раввно предметы в основном с маленькой вероятностью а нужно на оборот. Чтобвы некотопррые предметы выпадали крайне редко а некоторые чаще. Нужно именно сделать плагин так как мне проще будет нежели это делать в редакторе где предметы расположены в хаотичном порядке. Плюс предметы это включая и брони и оружие а в mz это в разных спитсках находится и через js можно объеденить к слову что я и делаю.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119487

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • ПаладинОраторПроект месяца 1 местоПроект года 3 место3 место в Обучающем конкурсеУчитель1 место в Обучающем конкурсеРазработчик3 местоПроект года 1 место
Ясно, то есть, чтобы вероятность выпадания была разной у разных предметов. Верно? А их в принципе много, предметов этих?
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119488

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
Alx_Yago пишет:
Ясно, то есть, чтобы вероятность выпадания была разной у разных предметов. Верно? А их в принципе много, предметов этих?
Не то что вероятность разная а сам факт чтобы она работала чтобы можно было сделать частовыпадаемые и редковыпадаемые. Чтото типа системы в Pixel Dungeon где хоть и рандом но есть предметы которые очень редко выпадают. Предметов много и определения их через плагин идет ну ты указываешь какие предметы нужны. Вот:
/*:
 * @plugindesc AL7_DropItems
 * @author Alexandr_7, DK
 * @target MZ
 * 
 * @param coreDropItems
 * @text Drop Items
 * @desc Drop Items
 * @type struct<sDropItem>[]
 * 
 * @param coreDropWeapons
 * @text Drop Weapons
 * @desc Drop Weapons
 * @type struct<sDropWeapon>[]
 * 
 * @param coreDropArmors
 * @text Drop Armor
 * @desc Drop Armor
 * @type struct<sDropArmor>[]
 * 
 * @command setDrops
 * @text Set Drop Items
 * @desc Set Drop Items
 * 
 * @arg dropItems
 * @text Drop Items
 * @desc Drop Items
 * @type struct<sDropItem>[]
 * 
 * @arg dropWeapons
 * @text Drop Weapons
 * @desc Drop Weapons
 * @type struct<sDropWeapon>[]
 * 
 * @arg dropArmors
 * @text Drop Armor
 * @desc Drop Armor
 * @type struct<sDropArmor>[]
 * 
 * @command getItems
 * @text Get Items
 * @desc Get Items
 * 
 */
 
/*~struct~sDropItem:
 * @param item
 * @text Iitem
 * @desc Iitem
 * @type item
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (0 to 100)
 * @type number
 * @min 0
 * @max 100
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 * @param timeDrop
 * @text Time Drop
 * @desc Time Drop
 * @min 0
 * 
 */
 
 /*~struct~sDropWeapon:
 * @param weapon
 * @text Weapon
 * @desc Weapon
 * @type weapon
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (0 to 100)
 * @type number
 * @min 0
 * @max 100
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 * @param timeDrop
 * @text Time Drop
 * @desc Time Drop
 * @min 0
 * 
 */
 
 /*~struct~sDropArmor:
 * @param armor
 * @text Armor
 * @desc Armor
 * @type armor
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (0 to 100)
 * @type number
 * @min 0
 * @max 100
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 * @param timeDrop
 * @text Time Drop
 * @desc Time Drop
 * @min 0
 * 
 */
timeDrop добавил как таймер выпада тоесть он не сможет выпасть раньше пока не закончится таймер но можно будет и убрать тут зависит от как будет система построена.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119494

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
И так. Объясню почему через плагин.
Во 1 предметы идут хаотично так как некоторые сюжетные а некоторые игровые
Во 2 предметов расчитывается много и добавлятся будут по мере необходимости
В 3 предметы это не только сами предметы это еще и броня и оружие.
В 4 сильно затрано под каждый предмет выделять переменную. Это что 200 предметов и 200 переменных. Легче поместить нужные предметы в список или массив структур если быть точным и уже через код объеденить массивы структур в 1 и делать дроп.

Но повторюсь я не силен в математике и теорию вероятностей я не знаю. А делается такая система дропа где некоторые предметы выпадают чаще некоторые реже а некоторые так вообще шанс получиьть 1 на милион. Такая система более распространенная в rpg играх и надеюсь есть знающие js и математикку чтобы это сделать. JS я и сам знаю немного но достаточно так что полностью за меня писать не надо. Просто помочь написать плагин.

Вообще можно сделать на подобие этой сисмтемы:

2020-09-19183325.png


Тоесть мы объеденяем структуры с предметами (Уже сделал) дальше мы сортируем по вероятности от меньшего к большему.
Дальше мы просто начинаем от конца массива к началу используя систему вероятности как это сделано в мейкере. Но я не знаю как такая система работает в мейкере.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119495

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Даритель СтимкеяПрограммист RubyВетеранОраторПрограммист JavaScript
Способ "в лоб", это привести все вероятности выпадения к одному знаменателю, рандомно перемешать номера предметов в массиве, затем сгенерить число и, идти по массиву, складывая вероятности выпадения каждого предмета, пока число не станет больше сгенереного рандомно. На каком элементе массива произошло, тот предмет и выпал.

Еще можно вместо генерации рандомного числа, попросить юзера нажать кнопку, когда он захочет.
После этого берем количество секунд с того момента, как попросили, делим на знаменатель и берем остаток в качестве сгенереного числа. А дальше, как в первом варианте, но тут еще кое-что от игрока зависит. :)
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119497

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1151
  • Спасибо получено: 2172
  • ПаладинОраторПроект месяца 1 местоПроект года 3 место3 место в Обучающем конкурсеУчитель1 место в Обучающем конкурсеРазработчик3 местоПроект года 1 место
Alexandr_7 пишет:
Во 1 предметы идут хаотично так как некоторые сюжетные а некоторые игровые
Во 2 предметов расчитывается много и добавлятся будут по мере необходимости
В 3 предметы это не только сами предметы это еще и броня и оружие.
В 4 сильно затрано под каждый предмет выделять переменную. Это что 200 предметов и 200 переменных.

С такими условиями оптимально, наверное, будет сделать, как Демий предлагал: через заметки у предметов, где указывать вероятность выпадения, а у тех, которые выпадать не должны, ставить там 0.
Администратор запретил публиковать записи гостям.

[MZ] Выпад предмета по вероятности. 4 года 2 мес. назад #119499

  • Alexandr_7
  • Alexandr_7 аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1196
  • Спасибо получено: 543
  • Проект месяца 2 местоПроект месяца 1 местоПроект месяца 3 местоУчительПроект года 3 местоВетеран
В принципе посмотрел как сделано в mz и сделал вот:Alx_Yago пишет:
Alexandr_7 пишет:
Во 1 предметы идут хаотично так как некоторые сюжетные а некоторые игровые
Во 2 предметов расчитывается много и добавлятся будут по мере необходимости
В 3 предметы это не только сами предметы это еще и броня и оружие.
В 4 сильно затрано под каждый предмет выделять переменную. Это что 200 предметов и 200 переменных.

С такими условиями оптимально, наверное, будет сделать, как Демий предлагал: через заметки у предметов, где указывать вероятность выпадения, а у тех, которые выпадать не должны, ставить там 0.
Как уже сказал лучше через плагин. Использовать заметки было бы эфективно но не просто о 1 и тд а через скрипт но для этого нужны знания регулярных выражений которые не знаю.

А вообще усовершенствовал скрипт:
/*:
 * @plugindesc AL7_DropItems
 * @author Alexandr_7, DK
 * @target MZ
 * 
 * @param coreDropItems
 * @text Drop Items
 * @desc Drop Items
 * @type struct<sDropItem>[]
 * 
 * @param coreDropWeapons
 * @text Drop Weapons
 * @desc Drop Weapons
 * @type struct<sDropWeapon>[]
 * 
 * @param coreDropArmors
 * @text Drop Armor
 * @desc Drop Armor
 * @type struct<sDropArmor>[]
 * 
 * @command setDrops
 * @text Set Drop Items
 * @desc Set Drop Items
 * 
 * @arg dropItems
 * @text Drop Items
 * @desc Drop Items
 * @type struct<sDropItem>[]
 * 
 * @arg dropWeapons
 * @text Drop Weapons
 * @desc Drop Weapons
 * @type struct<sDropWeapon>[]
 * 
 * @arg dropArmors
 * @text Drop Armor
 * @desc Drop Armor
 * @type struct<sDropArmor>[]
 * 
 * @command getItems
 * @text Get Items
 * @desc Get Items
 * 
 */
 
/*~struct~sDropItem:
 * @param item
 * @text Iitem
 * @desc Iitem
 * @type item
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (1/N)
 * @type number
 * @min 1
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 * @param timeDrop
 * @text Time Drop
 * @desc Time Drop
 * @min 0
 * 
 */
 
 /*~struct~sDropWeapon:
 * @param weapon
 * @text Weapon
 * @desc Weapon
 * @type weapon
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (1/N)
 * @type number
 * @min 1
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 * @param timeDrop
 * @text Time Drop
 * @desc Time Drop
 * @min 0
 * 
 */
 
 /*~struct~sDropArmor:
 * @param armor
 * @text Armor
 * @desc Armor
 * @type armor
 * 
 * @param dropProbability
 * @text Drop probability
 * @desc Drop probability (1/N)
 * @type number
 * @min 1
 * 
 * @param countDropMin
 * @text Count Drop Min
 * @desc Count Drop Min
 * @min 1
 * 
 * @param countDropMax
 * @text Count Drop Max
 * @desc Count Drop Max
 * @min 1
 * 
 * @param timeDrop
 * @text Time Drop
 * @desc Time Drop
 * @min 0
 * 
 * 
 * 
 */
 
var Imported = Imported || {};
Imported.AL7_DropItems;
 
if (Imported.AL7_Core === false) {
    throw new Error('No plugin "AL7_Core"! Plugin "AL7_DropItems" will not work!');
}
 
AL7.DropItems = AL7.DropItems || {};
AL7.DropItems.version = 1;
 
AL7.DropItems.param = AL7.AL7PluginManager('AL7_DropItems');
 
AL7.DropItems.allItems = null;
 
AL7.DropItems.concatAllItems = function () {
    AL7.DropItems.param.coreDropItems.forEach(item => { item.type = 'item';});
    AL7.DropItems.param.coreDropWeapons.forEach(item => { item.type = 'weapon';});
    AL7.DropItems.param.coreDropArmors.forEach(item => { item.type = 'armor';});
    AL7.DropItems.allItems = AL7.DropItems.param.coreDropItems.concat(AL7.DropItems.param.coreDropWeapons, AL7.DropItems.param.coreDropArmors).sort((a, b) => a.dropProbability - b.dropProbability);
}
 
AL7.DropItems.concatAllItems();
 
AL7.DropItems.getItem = function(itemID) {
    let gItem = AL7.DropItems.allItems[itemID];
    let countItem = AL7.getRandomInRange(gItem.countDropMin, gItem.countDropMax);
    switch (gItem.type) {
        case 'item':
            $gameParty.gainItem($dataItems[gItem.item], countItem, false);
            $gameMessage.setSpeakerName('Предмет');
            $gameMessage.setBackground(0);
            $gameMessage.setPositionType(1);
            $gameMessage.add('Найден предмет: \\c[17]\'\\c[1]' + $dataItems[gItem.item].name + '\\c[17]\' \\c[2]+ \\c[14]' +  String(countItem) + ' \\c[0]ед.');
            break;
        case 'weapon':
            $gameParty.gainItem($dataWeapons[gItem.weapon], countItem, false);
            $gameMessage.setSpeakerName('Оружие');
            $gameMessage.setBackground(0);
            $gameMessage.setPositionType(1);
            $gameMessage.add('Найдено оружие: \\c[17]\'\\c[1]' + $dataWeapons[gItem.weapon].name + '\\c[17]\' \\c[2]+ \\c[14]' +  String(countItem) + ' \\c[0]ед.');
            break;
        case 'armor':
                $gameParty.gainItem($dataArmors[gItem.armor], countItem, false);
                $gameMessage.setSpeakerName('Броня');
                $gameMessage.setBackground(0);
                $gameMessage.setPositionType(1);
                $gameMessage.add('Найдена броня: \\c[17]\'\\c[1]' + $dataArmors[gItem.armor].name + '\\c[17]\' \\c[2]+ \\c[14]' +  String(countItem) + ' \\c[0]ед.');
                break;
    }
}
 
PluginManager.registerCommand("AL7_DropItems", "setDrops", args => {
    AL7.DropItems.param.coreDropItems = AL7.JSONParse(args.dropItems);
    AL7.DropItems.param.coreDropWeapons = AL7.JSONParse(args.dropWeapons);
    AL7.DropItems.param.coreDropArmors = AL7.JSONParse(args.dropArmors);
    AL7.DropItems.concatAllItems();
});
 
PluginManager.registerCommand("AL7_DropItems", "getItems", args => {
    let num = (AL7.DropItems.allItems.length - 1);
    let rate = 0;
    for (var i = num; i >= 0; i--) {
        if ((Math.random() * AL7.DropItems.allItems[i].dropProbability) < 1) {
            AL7.DropItems.getItem(i);
            break;
        }
    }
});
Не знаю. Толи я такой счастливчик толи рандом 1/7 фиговый но факт в том что 1/7 и выпадает это частенько у меня
Бывает частенько выпадает 1/5 или 1/3 но блин выходит что 1/1 выпадает редко.
Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.346 секунд