//============================================================================= // MrTS_LimitedInventory.js //============================================================================= /*: * @plugindesc Limits inventory space by weight or item numbers. * @author Mr. Trivel * * @param Limit Mode * @desc Which mode to use? weight/number * Default: number * @default number * * @param Default Limit * @desc Inventory limit. * Default: 30 * @default 30 * * @param Default Weight * @desc If using 'weight' mode, how much items weight by default? * Default: 1 * @default 1 * * @param Show Window * @desc Show inventory limit window in item menu? true/false * Default: True * @default True * * @param Limit Text * @desc How will limit be named in Window? * Default: Limit: * @default Limit: * * @help * -------------------------------------------------------------------------------- * Terms of Use * -------------------------------------------------------------------------------- * Don't remove the header or claim that you wrote this plugin. * Credit Mr. Trivel if using this plugin in your project. * Free for commercial and non-commercial projects. * -------------------------------------------------------------------------------- * Version 1.0 * -------------------------------------------------------------------------------- * * -------------------------------------------------------------------------------- * Item Tags * -------------------------------------------------------------------------------- * <Weight: [AMOUNT]> * If using 'weight' mode, use the following to determine the weight of item. * * Example: * <Weight: 5> * -------------------------------------------------------------------------------- * * -------------------------------------------------------------------------------- * Equipment Tags * -------------------------------------------------------------------------------- * <InvLimitChange: [AMOUNT]> * Changes inventory limit by AMOUNT while item is equipped. Works for both modes. * * <InvLimitChange: -5> * <InvLimitChange: 10> * -------------------------------------------------------------------------------- * * -------------------------------------------------------------------------------- * Plugin Commands * -------------------------------------------------------------------------------- * InventoryLimit Add [AMOUNT] - Adds Amount to limit. * InventoryLimit Sub [AMOUNT] - Removes Amount from limit. * InventoryLimit Ignore - Ignores inventory limit when adding items * InventoryLimit StopIgnore - Stops ignoring inventory limit when adding items * * Examples: * InventoryLimit Add 10 * InventoryLimit Sub 5 * InventoryLimit Ignore * InventoryLimit StopIgnore * -------------------------------------------------------------------------------- * * -------------------------------------------------------------------------------- * Script Calls * -------------------------------------------------------------------------------- * $gameParty.getInventorySpaceLeft() - returns amount of space left * $gameParty.getInventorySpaceTotal() - returns total amount of space * $gameParty.getInventorySpaceUsed() - returns used amount of space * -------------------------------------------------------------------------------- * * -------------------------------------------------------------------------------- * Version History * -------------------------------------------------------------------------------- * 1.0 - Release */ (function() { var parameters = PluginManager.parameters('MrTS_LimitedInventory'); var paramLimitMode = String(parameters['Limit Mode'] || "number"); var paramDefaultLimit = Number(parameters['Default Limit'] || 30); var paramDefaultWeight = Number(parameters['Default Weight'] || 1); var paramShowWindow = (parameters['Show Window'] || "true").toLowerCase() === "true"; var paramLimitText = String(parameters['Limit Text'] || "Limit:"); //-------------------------------------------------------------------------- // Game_Interpreter // var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); if (command.toLowerCase() === "inventorylimit") { switch (args[0].toUpperCase()) { case 'ADD': { $gameParty.increaseInventorySpace(Number(args[1])); } break; case 'SUB': { $gameParty.decreaseInventorySpace(Number(args[1])); } break; case 'IGNORE': { $gameParty._ignoreInvLimit = true; } break; case 'STOPIGNORE': { $gameParty._ignoreInvLimit = false; } break; } } }; //-------------------------------------------------------------------------- // Game_Party var _Game_Party_initialize = Game_Party.prototype.initialize; Game_Party.prototype.initialize = function() { _Game_Party_initialize.call(this); this._inventorySpace = paramDefaultLimit; this._modifiedInvSpace = 0; this._ignoreInvLimit = false; }; Game_Party.prototype.increaseInventorySpace = function(amount) { this._modifiedInvSpace += amount; }; Game_Party.prototype.decreaseInventorySpace = function(amount) { this.increaseInventorySpace(-amount); }; Game_Party.prototype.getInventorySpaceTotal = function() { var base = this._inventorySpace; var mod = this._modifiedInvSpace; var equipment = 0; for (var i = 0; i < this.members().length; i++) { equipment += this.members()[i].getInventorySpaceBonus(); } return Math.max(0, (base+mod+equipment)); }; Game_Party.prototype.getInventorySpaceUsed = function() { var used = 0; for (var i = 0; i < this.allItems().length; i++) { switch(paramLimitMode) { case 'number': { used += this.numItems(this.allItems()[i]); } break; case 'weight': { var weight = this.allItems()[i].meta.Weight ? Number(this.allItems()[i].meta.Weight) : paramDefaultWeight; used += this.numItems(this.allItems()[i]) * weight; } break; } } return used; }; Game_Party.prototype.getInventorySpaceLeft = function() { return this.getInventorySpaceTotal() - this.getInventorySpaceUsed(); }; Game_Party.prototype.getItemWeight = function(item) { switch(paramLimitMode) { case 'number': { return 1; } break; case 'weight': { var weight = item.meta.Weight ? Number(item.meta.Weight) : paramDefaultWeight; return weight; } break; } return 1; }; var _Game_Party_gainItem = Game_Party.prototype.gainItem; Game_Party.prototype.gainItem = function(item, amount, includeEquip) { if (amount < 0 || this._ignoreInvLimit) _Game_Party_gainItem.call(this, item, amount, includeEquip); else { var weight = this.getItemWeight(item); var tWeight = weight * amount; var aWeight = this.getInventorySpaceLeft(); if ((aWeight - tWeight) >= 0) _Game_Party_gainItem.call(this, item, amount, includeEquip); else { var newAmount = Math.floor(aWeight/weight); if (newAmount > 0) _Game_Party_gainItem.call(this, item, newAmount, includeEquip); } } }; Game_Actor.prototype.getInventorySpaceBonus = function() { var bonus = 0; for (var i = 0; i < this.equips().length; i++) { if (!this.equips()[i]) continue; if (this.equips()[i].meta.InvLimitChange) bonus += Number(this.equips()[i].meta.InvLimitChange); } return bonus; }; //-------------------------------------------------------------------------- // Window_InventoryLimit // // Shows how much is left. function Window_InventoryLimit() { this.initialize.apply(this, arguments); }; Window_InventoryLimit.prototype = Object.create(Window_Base.prototype); Window_InventoryLimit.prototype.constructor = Window_InventoryLimit; Window_InventoryLimit.prototype.initialize = function(x, y, w, h) { Window_Base.prototype.initialize.call(this, x, y, w, h); this.refresh(); }; Window_InventoryLimit.prototype.refresh = function() { this.contents.clear(); var u = $gameParty.getInventorySpaceUsed(); var t = $gameParty.getInventorySpaceTotal(); this.drawText(paramLimitText + " " + u + "/" + t, 0, 0); }; //-------------------------------------------------------------------------- // Scene_Item // var _Scene_Item_create = Scene_Item.prototype.create; Scene_Item.prototype.create = function() { _Scene_Item_create.call(this); if (paramShowWindow) this.createLimitWindow(); }; Scene_Item.prototype.createLimitWindow = function() { var wx = this._itemWindow.x; var ww = this._itemWindow.width; var wh = this._itemWindow.fittingHeight(1); this._itemWindow.height = this._itemWindow.height - wh; this._itemWindow.refresh(); var wy = this._itemWindow.y + this._itemWindow.height; this._invLimitWindow = new Window_InventoryLimit(wx, wy, ww, wh); this.addWindow(this._invLimitWindow); }; var _Scene_Item_useItem = Scene_Item.prototype.useItem; Scene_Item.prototype.useItem = function() { _Scene_Item_useItem.call(this); if (this._invLimitWindow) this._invLimitWindow.refresh(); }; })();
{ var weight = item.meta.Weight ? Number(item.meta.Weight) : paramDefaultWeight; return weight; } break; } return 1; }; var _Game_Party_gainItem = Game_Party.prototype.gainItem; Game_Party.prototype.gainItem = function(item, amount, includeEquip) { if (amount < 0 || this._ignoreInvLimit) _Game_Party_gainItem.call(this, item, amount, includeEquip); else
3.15 KB, 下载次数: 8
xiamumomo 发表于 2024-4-22 21:55
这是另一个重量你尝试看看如果需要仓库的我到时候再发但是是不同作者的插件 ...
505681468 发表于 2024-4-22 21:20
可能是 Scene_Equip.prototype.onItemOk 获取了错误的 item ?
可以看看 this.actor().changeEquip(this._s ...
xiamumomo 发表于 2024-4-22 21:55
这是另一个重量你尝试看看如果需要仓库的我到时候再发但是是不同作者的插件 ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |