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

Выпад предмета по вероятности.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 8 мес. назад - 5 года 8 мес. назад #119320 от Alexandr_7
Здравствуйте.
Нужна помощь.
RPG Maker MZ.
Короче нужно сделать систему выпода предметов с процентной вероятностью на каждый предмет.
Есть идеи как это реализовать?
Делать для каждого предмета несколько чисел и рандомное число использовать. Так конечно можно но делать это методами Мейкера запарно может кто знает вариант получше?
Правильнее по формуле вероятности но я честно это так и не освоил. Не знаю формулы. Но зная формулу смогу написать скрипт.

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 5 года 8 мес. назад пользователем Alexandr_7.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Разработчик 3 место 3 место в Обучающем конкурсе Учитель Оратор 1 место в Обучающем конкурсе Паладин Проект года 3 место Проект года 1 место
Больше
5 года 8 мес. назад - 5 года 8 мес. назад #119321 от Alx_Yago
Возможно, так. Здесь вариант для пяти предметов. В переменных 1-5 указаны вероятности выпадания каждого в процентах.
Code:
◆Переменная:#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 ◆Прервать цикл ◆ :Конец ◆ :Повторить цикл
Последнее редактирование: 5 года 8 мес. назад пользователем Alx_Yago.
Спасибо сказали: WhitePaper, LiRo

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 8 мес. назад #119330 от Alexandr_7
Проблема в том что данная система завязана на номер переменной равен номеру предмета но у меня мало того что предметы в хаотичном порядке так еще и переменные некоторые для таких предметов заняты но тут не только в этом. Нужно думаю без радома чисто по вероятности.
И только если вероятность совпадает то рандомно тогда например у некоторых предметов вероятность может совпадать и тогда рандомно.
А так нужно по вероятности например для зелий лечений 90 процентов шанса что выпадет именно оно и дальше по уменьшению

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Разработчик 3 место 3 место в Обучающем конкурсе Учитель Оратор 1 место в Обучающем конкурсе Паладин Проект года 3 место Проект года 1 место
Больше
5 года 8 мес. назад #119333 от Alx_Yago

Alexandr_7 пишет: Проблема в том что данная система завязана на номер переменной равен номеру предмета но у меня мало того что предметы в хаотичном порядке так еще и переменные некоторые для таких предметов заняты но тут не только в этом. Нужно думаю без радома чисто по вероятности.
И только если вероятность совпадает то рандомно тогда например у некоторых предметов вероятность может совпадать и тогда рандомно.
А так нужно по вероятности например для зелий лечений 90 процентов шанса что выпадет именно оно и дальше по уменьшению

Никаких проблем с тем, чтобы сделать сдвиг пула переменных относительно номеров предметов, а тем предметам, которые не должны выпадать, сделать вероятность =0.
Вообще рандом и вероятность это примерно одно и то же. Объяснишь подробнее, или с примером, как это должно происходить в твоём понимании? Честно, я не очень понял про "если вероятность совпадает, то рандомно".

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 8 мес. назад - 5 года 8 мес. назад #119336 от Alexandr_7
Короче нужно сделать такую систему чтобы некоторые предметы выпадали чаще, некоторые реже а некоторые так вообще очень редко и иногда так вообще предметы не выподали.

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7
Последнее редактирование: 5 года 8 мес. назад пользователем Alexandr_7.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
5 года 8 мес. назад #119337 от Демий
Короче, простой вариант. Пишем в массив айди предметов, которые должны выпадать. Любым удобным способом. Те, что частые - по три четыре раза пишем, те что редкие два, а ультра редкие, один. Ну это к примеру.
Игрок должен получить предмет? Получаем случайный элемент массива как айди предмета, что надо ему дать.
Спасибо сказали: LiRo

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 8 мес. назад #119351 от Alexandr_7

Демий пишет: Короче, простой вариант. Пишем в массив айди предметов, которые должны выпадать. Любым удобным способом. Те, что частые - по три четыре раза пишем, те что редкие два, а ультра редкие, один. Ну это к примеру.
Игрок должен получить предмет? Получаем случайный элемент массива как айди предмета, что надо ему дать.

Можно но я запарюсь это делать учитывая что игрой массивы не предусмотрены только через скрипт. В принципе может плагин себе написать. Кокрас для работы с командами плагинов MZ. Наверное напишу.
Только с кодом могут быть проблемы. Вообще напишите кто знаком с JS как там сделать такое чтобы некоторое число выпадало чаще чем другие. Короче речь о том чтобы создать плагин указываешь ИД предмета и вероятность выпадения. Нужно создать массив по этим данным и уже рандомно из количества данных массива выбирать.

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 8 мес. назад #119355 от Alexandr_7
Вроде с помощью ДК написал плагин
Код плагина

Не уверен будет ли это работать и плагин чисто для MZ. пока выкладывать не буду.
Выложил код для людей знающих.

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 7 мес. назад - 5 года 7 мес. назад #119480 от Alexandr_7
Прошу помощи. Может кто помочь решить проблему. Точнее допилить плагин:
Code:
AL7.getRandomInRange = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
Code:
/*: * @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
Последнее редактирование: 5 года 7 мес. назад пользователем Alexandr_7.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Разработчик 3 место 3 место в Обучающем конкурсе Учитель Оратор 1 место в Обучающем конкурсе Паладин Проект года 3 место Проект года 1 место
Больше
5 года 7 мес. назад #119484 от Alx_Yago
Александр, объясни чем "по вероятности" отличается от "рандомно"?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 7 мес. назад #119486 от Alexandr_7

Alx_Yago пишет: Александр, объясни чем "по вероятности" отличается от "рандомно"?

Вернее мне нужно рандомно но учитывая вероятность чтоб чаще выпадали те предметы у еоторых вероятность выпада выше. Как уже сказал плагин вроде как и отсеивает предметы но выпадают все раввно предметы в основном с маленькой вероятностью а нужно на оборот. Чтобвы некотопррые предметы выпадали крайне редко а некоторые чаще. Нужно именно сделать плагин так как мне проще будет нежели это делать в редакторе где предметы расположены в хаотичном порядке. Плюс предметы это включая и брони и оружие а в mz это в разных спитсках находится и через js можно объеденить к слову что я и делаю.

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Разработчик 3 место 3 место в Обучающем конкурсе Учитель Оратор 1 место в Обучающем конкурсе Паладин Проект года 3 место Проект года 1 место
Больше
5 года 7 мес. назад #119487 от Alx_Yago
Ясно, то есть, чтобы вероятность выпадания была разной у разных предметов. Верно? А их в принципе много, предметов этих?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 7 мес. назад #119488 от Alexandr_7

Alx_Yago пишет: Ясно, то есть, чтобы вероятность выпадания была разной у разных предметов. Верно? А их в принципе много, предметов этих?

Не то что вероятность разная а сам факт чтобы она работала чтобы можно было сделать частовыпадаемые и редковыпадаемые. Чтото типа системы в Pixel Dungeon где хоть и рандом но есть предметы которые очень редко выпадают. Предметов много и определения их через плагин идет ну ты указываешь какие предметы нужны. Вот:
Code:
/*: * @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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 7 мес. назад #119494 от Alexandr_7
И так. Объясню почему через плагин.
Во 1 предметы идут хаотично так как некоторые сюжетные а некоторые игровые
Во 2 предметов расчитывается много и добавлятся будут по мере необходимости
В 3 предметы это не только сами предметы это еще и броня и оружие.
В 4 сильно затрано под каждый предмет выделять переменную. Это что 200 предметов и 200 переменных. Легче поместить нужные предметы в список или массив структур если быть точным и уже через код объеденить массивы структур в 1 и делать дроп.

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

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



Тоесть мы объеденяем структуры с предметами (Уже сделал) дальше мы сортируем по вероятности от меньшего к большему.
Дальше мы просто начинаем от конца массива к началу используя систему вероятности как это сделано в мейкере. Но я не знаю как такая система работает в мейкере.

Мой вк: vk.com/borisov_alexandr_5
Мой ютуб канал: www.youtube.com/@alexandr_5836
Мой бусти: boosty.to/alexandr-7

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
5 года 7 мес. назад #119495 от Lekste
Способ "в лоб", это привести все вероятности выпадения к одному знаменателю, рандомно перемешать номера предметов в массиве, затем сгенерить число и, идти по массиву, складывая вероятности выпадения каждого предмета, пока число не станет больше сгенереного рандомно. На каком элементе массива произошло, тот предмет и выпал.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Разработчик 3 место 3 место в Обучающем конкурсе Учитель Оратор 1 место в Обучающем конкурсе Паладин Проект года 3 место Проект года 1 место
Больше
5 года 7 мес. назад #119497 от Alx_Yago

Alexandr_7 пишет: Во 1 предметы идут хаотично так как некоторые сюжетные а некоторые игровые
Во 2 предметов расчитывается много и добавлятся будут по мере необходимости
В 3 предметы это не только сами предметы это еще и броня и оружие.
В 4 сильно затрано под каждый предмет выделять переменную. Это что 200 предметов и 200 переменных.


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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 3 место Проект месяца 2 место Ветеран Учитель Проект месяца 1 место Проект года 3 место Разработчик
Больше
5 года 7 мес. назад #119499 от Alexandr_7
В принципе посмотрел как сделано в mz и сделал вот:

Alx_Yago пишет:

Alexandr_7 пишет: Во 1 предметы идут хаотично так как некоторые сюжетные а некоторые игровые
Во 2 предметов расчитывается много и добавлятся будут по мере необходимости
В 3 предметы это не только сами предметы это еще и броня и оружие.
В 4 сильно затрано под каждый предмет выделять переменную. Это что 200 предметов и 200 переменных.


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

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

А вообще усовершенствовал скрипт:
Code:
/*: * @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.135 секунд
Работает на Kunena форум