И так. Здравствуйте. Вместе с DK написали плагин. Но он все равно работает неправильно
Код: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 * * @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 * */ 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; } });
var countItem = AL7.getRandomInRange(rndItem.countDropMin, rndItem.countDropMax);
И не могу отловить. Ошибюка говорит что значение countDropMin не определенно а в командах оно везде определенно. Возможно выходит ситуация что сам rndItem не определенным выходит если отсеивание про исходит так что вообще предметов не остается но по идеи ошибка тогда должна быть здесь:
let rndItem = listItems[AL7.getRandomInRange(0, (listItems.length - 1))];




Ответить с цитированием


Социальные закладки