查看: 3839|回复: 3

[已经解决] 请教mv做出物品仓库

[复制链接]
梦石
0
星屑
50
在线时间
12 小时
注册时间
2016-2-10
回帖
6
发表于 2016-2-13 12:26:15 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
可以将物品和装备存放在仓库里,并且可以取出。
请问怎么做到啊?
梦石
0
星屑
79
在线时间
112 小时
注册时间
2010-6-16
回帖
70
发表于 2016-2-13 12:33:47 | 显示全部楼层
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2016-2-13 12:35:28 | 显示全部楼层
本帖最后由 tseyik 于 2016-2-13 12:44 编辑


http://midori.wp.xdomain.jp/?cat=15

プラグインコマンド 「Storage」をイベント
在事件的插件命 「Storage」呼叫
[fold=シンプルな預かり所][pre lang="javascript"]//=============================================================================
// Storage.js
//=============================================================================
/*:
* @plugindesc シンプルな預かり所を追加します。
* @author 翠
* @help プラグインコマンド 「Storage」をイベントに記述してください。
*
* @param 預かり数
* @desc 預けられる最大の数
* @default 999
*
* @param 倉庫リストの区切り位置
* @desc 倉庫リストの:の位置
* 預かり数2桁なら00
* 預かり数3桁なら000
* @default 000
*
* @param 預けるコマンドの名称
* @desc
* @default 預ける
*
* @param 引き出すコマンドの名称
* @desc
* @default 引き出す
*
* @param 大事な物カテゴリ表示フラグ
* @desc
* @default false
*
* @param 数値ウィンドウ横幅
* @desc
* @default 400
*
* @param 数値ウィンドウ縦幅
* @desc
* @default 76
*
* @param 数値ウィンドウ縦位置補正
* @desc
* @default 24
*
*/

var $gameStorage       = null;
var Mot = Mot || {};
Mot.Storage = Mot.Storage || {};
Mot.Storage.DataManager_createGameObjects = DataManager.createGameObjects;
DataManager.createGameObjects = function() {
    Mot.Storage.DataManager_createGameObjects.call(this);
    $gameStorage       = new Game_Storage();
};

Mot.Storage.DataManager_makeSaveContents = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
    var contents = Mot.Storage.DataManager_makeSaveContents.call(this);
    contents.storage      = $gameStorage;
    return contents;
};
Mot.Storage.DataManager_extractSaveContents = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(contents) {
    Mot.Storage.DataManager_extractSaveContents.call(this, contents);
    $gameStorage       = contents.storage;
};

function Game_Storage() {
    this.initialize.apply(this, arguments);
}
(function() {
    var parameters = PluginManager.parameters('Storage');
    var l_pos   = String(parameters['倉庫リストの区切り位置'] || '000');
    var s_val   = String(parameters['引き出すコマンドの名称'] || '預ける');
    var p_val   = String(parameters['預けるコマンドの名称'] || '引き出す');
    var c_vis   = String(parameters['大事な物カテゴリ表示フラグ'] || 'false');   
    var maxst   = Number(parameters['預かり数'] || 999);
    var num_w   = Number(parameters['数値ウィンドウ横幅'] || 400);
    var num_h   = Number(parameters['数値ウィンドウ縦幅'] || 76);
    var num_y   = Number(parameters['数値ウィンドウ縦位置補正'] || 24);
   
    var _Game_Interpreter_pluginCommand =
            Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
        _Game_Interpreter_pluginCommand.call(this, command, args);
        if (command === 'Storage') {
            SceneManager.push(Scene_Storage);
        }
    };
    Game_Storage.prototype = Object.create(Game_Unit.prototype);
    Game_Storage.prototype.constructor = Game_Storage;

    Game_Storage.prototype.initialize = function() {
        Game_Unit.prototype.initialize.call(this);
        this._lastItem = new Game_Item();
        this.initAllItems();
    };

    Game_Storage.prototype.initAllItems = function() {
        this._items = {};
        this._weapons = {};
        this._armors = {};
    };

    Game_Storage.prototype.items = function() {
        var list = [];
        for (var id in this._items) {
            list.push($dataItems[id]);
        }
        return list;
    };

    Game_Storage.prototype.weapons = function() {
        var list = [];
        for (var id in this._weapons) {
            list.push($dataWeapons[id]);
        }
        return list;
    };

    Game_Storage.prototype.armors = function() {
        var list = [];
        for (var id in this._armors) {
            list.push($dataArmors[id]);
        }
        return list;
    };
    Game_Storage.prototype.equipItems = function() {
        return this.weapons().concat(this.armors());
    };

    Game_Storage.prototype.allItems = function() {
        return this.items().concat(this.equipItems());
    };

    Game_Storage.prototype.itemContainer = function(item) {
        if (!item) {
            return null;
        } else if (DataManager.isItem(item)) {
            return this._items;
        } else if (DataManager.isWeapon(item)) {
            return this._weapons;
        } else if (DataManager.isArmor(item)) {
            return this._armors;
        } else {
            return null;
        }
    };

    Game_Storage.prototype.numItems = function(item) {
        var container = this.itemContainer(item);
        return container ? container[item.id] || 0 : 0;
    };

    Game_Storage.prototype.maxItems = function(item) {
        return maxst;
    };

    Game_Storage.prototype.hasMaxItems = function(item) {
        return this.numItems(item) >= this.maxItems(item);
    };

    Game_Storage.prototype.hasItem = function(item, includeEquip) {
        if (includeEquip === undefined) {
            includeEquip = false;
        }
        if (this.numItems(item) > 0) {
            return true;
        } else if (includeEquip && this.isAnyMemberEquipped(item)) {
            return true;
        } else {
            return false;
        }
    };

    Game_Party.prototype.lastItem = function() {
        return this._lastItem.object();
    };

    Game_Party.prototype.setLastItem = function(item) {
        this._lastItem.setObject(item);
    };

    Game_Storage.prototype.isAnyMemberEquipped = function(item) {
        return this.members().some(function(actor) {
            return actor.equips().contains(item);
        });
    };

    Game_Storage.prototype.gainItem = function(item, amount, includeEquip) {
        var container = this.itemContainer(item);
        if (container) {
            var lastNumber = this.numItems(item);
            var newNumber = lastNumber + amount;
            container[item.id] = newNumber.clamp(0, this.maxItems(item));
            if (container[item.id] === 0) {
                delete container[item.id];
            }
            $gameMap.requestRefresh();
        }
    };

    Game_Storage.prototype.loseItem = function(item, amount, includeEquip) {
        this.gainItem(item, -amount, includeEquip);
    };

    //-----------------------------------------------------------------------------
    // Scene_Storage
    //-----------------------------------------------------------------------------

    function Scene_Storage() {
        this.initialize.apply(this, arguments);
    }

    Scene_Storage.prototype = Object.create(Scene_ItemBase.prototype);
    Scene_Storage.prototype.constructor = Scene_Storage;

    Scene_Storage.prototype.initialize = function() {
        Scene_ItemBase.prototype.initialize.call(this);
        this.sMode = null;
    };

    Scene_Storage.prototype.create = function() {
        Scene_ItemBase.prototype.create.call(this);
        this.createHelpWindow();
        this.createCoiceWindow();
        this.createCategoryWindow();
        this.createSItemWindow();
        this.createPItemWindow();
        this.createNumberWindow();
    };

    Scene_Storage.prototype.createCategoryWindow = function() {
        this._categoryWindow = new Window_ItemCategory();
        this._categoryWindow.setHelpWindow(this._helpWindow);
        this._categoryWindow.y = this._helpWindow.height;
        this._categoryWindow.setHandler('ok',     this.selectStorage.bind(this));
        this._categoryWindow.setHandler('cancel', this.popScene.bind(this));
        this.addWindow(this._categoryWindow);
    };

    Scene_Storage.prototype.createCoiceWindow = function() {
        this._coiceWindow = new Window_Coice();
        this._coiceWindow.setHelpWindow(this._helpWindow);
        this._coiceWindow.y = this._helpWindow.height;
        this._coiceWindow.setHandler('ok',     this.storageOk.bind(this));
        this._coiceWindow.setHandler('cancel', this.returnCategory.bind(this));
        this.addWindow(this._coiceWindow);
        this._coiceWindow.deactivate();
        
    };
    Scene_Storage.prototype.createSItemWindow = function() {
        var wy = this._categoryWindow.y + this._categoryWindow.height;
        var wh = Graphics.boxHeight - wy;
        this._sitemWindow = new Window_ItemList_Storage(0, wy, Graphics.boxWidth / 2, wh);
        this._sitemWindow.setHelpWindow(this._helpWindow);
        this._sitemWindow.setHandler('ok',     this.onItemOk.bind(this));
        this._sitemWindow.setHandler('cancel', this.returnCoice.bind(this));
        this.addWindow(this._sitemWindow);
        this._categoryWindow.setSItemWindow(this._sitemWindow);
    };
    Scene_Storage.prototype.createPItemWindow = function() {
        var wy = this._categoryWindow.y + this._categoryWindow.height;
        var wh = Graphics.boxHeight - wy;
        var wx = this._sitemWindow.width;
        this._pitemWindow = new Window_ItemList_Paty(wx, wy, Graphics.boxWidth / 2, wh);
        this._pitemWindow.setHelpWindow(this._helpWindow);
        this._pitemWindow.setHandler('ok',     this.onItemOk.bind(this));
        this._pitemWindow.setHandler('cancel', this.returnCoice.bind(this));
        this.addWindow(this._pitemWindow);
        this._categoryWindow.setPItemWindow(this._pitemWindow);
    };

    Scene_Storage.prototype.createNumberWindow = function() {
        var wy = (Graphics.boxHeight / 2) - (num_h + num_y);
        var wx = (Graphics.boxWidth - num_w ) / 2;
        this._numberWindow = new Window_StorageNumber(wx, wy, num_w);
        this._numberWindow.hide();
        this._numberWindow.setHandler('ok',     this.onNumberOk.bind(this));
        this._numberWindow.setHandler('cancel', this.onNumberCancel.bind(this));
        this.addWindow(this._numberWindow);
    };

    Scene_Storage.prototype.selectStorage = function() {
        this._categoryWindow.deactivate();
        this._categoryWindow.hide();
        this._coiceWindow.activate();
        this._coiceWindow.show();

    };

    Scene_Storage.prototype.storageOk = function() {
        this.sMode = (this._coiceWindow._index == 0) ? this._pitemWindow:this._sitemWindow;
        this.sMode.activate();
        this.sMode.select(0);
    };

    Scene_Storage.prototype.returnCategory = function() {
        this._categoryWindow.activate();
        this._categoryWindow.show();
        this._coiceWindow.deactivate();
        this._coiceWindow.hide();
    };

    Scene_Storage.prototype.onItemOk = function() {
        this._numberWindow.setup(this.sMode.getitem(), this.sMode.getnum(),this._coiceWindow._index);
        this._numberWindow.setCurrencyUnit(true);
        this._numberWindow.show();
        this._numberWindow.activate();
    };

    Scene_Storage.prototype.returnCoice = function() {
            this.sMode.deselect();
            this.sMode.deactivate();
            this._coiceWindow.activate();
    };

    Scene_Storage.prototype.onCategoryOk = function() {
        this._itemWindow.activate();
        this._itemWindow.selectLast();
    };

    Scene_Storage.prototype.onNumberOk = function() {
        var item = this._numberWindow.tradeItem();
        if (this._coiceWindow._index == 0){
            $gameParty.loseItem(item[0],item[1]);
            $gameStorage.gainItem(item[0],item[1]);
        }else{
            $gameParty.gainItem(item[0],item[1]);
            $gameStorage.loseItem(item[0],item[1]);
        }
        SoundManager.playOk();
        this._sitemWindow.refresh();
        this._pitemWindow.refresh();
        
        this.sMode.activate();
        this._numberWindow.hide();
        this._numberWindow.deactivate();
    };

    Scene_Storage.prototype.onNumberCancel = function() {
        this.sMode.activate();
        this._numberWindow.hide();
        this._numberWindow.deactivate();
    };

    //-----------------------------------------------------------------------------
    // Window_Coice
    //-----------------------------------------------------------------------------

    function Window_Coice() {
        this.initialize.apply(this, arguments);
    }

    Window_Coice.prototype = Object.create(Window_HorzCommand.prototype);
    Window_Coice.prototype.constructor = Window_Coice;

    Window_Coice.prototype.initialize = function() {
        Window_HorzCommand.prototype.initialize.call(this, 0, 0);
    };

    Window_Coice.prototype.windowWidth = function() {
        return Graphics.boxWidth;
    };

    Window_Coice.prototype.maxCols = function() {
        return 2;
    };

    Window_Coice.prototype.makeCommandList = function() {
        this.addCommand(p_val,  'gain');
        this.addCommand(s_val,  'lose');
    };

    //-----------------------------------------------------------------------------
    // Window_ItemCategory
    //-----------------------------------------------------------------------------

    function Window_ItemCategory() {
        this.initialize.apply(this, arguments);
    }

    Window_ItemCategory.prototype = Object.create(Window_HorzCommand.prototype);
    Window_ItemCategory.prototype.constructor = Window_ItemList;

    Window_ItemCategory.prototype.initialize = function() {
        Window_HorzCommand.prototype.initialize.call(this, 0, 0);
    };

    Window_ItemCategory.prototype.windowWidth = function() {
        return Graphics.boxWidth;
    };

    Window_ItemCategory.prototype.maxCols = function() {
        if (c_vis == 'true'){
            return 4;
        }else{
            return 3;
        }
    };

    Window_ItemCategory.prototype.update = function() {
        Window_HorzCommand.prototype.update.call(this);
        if (this._sitemWindow) {
            this._sitemWindow.setCategory(this.currentSymbol());
        }
        if (this._pitemWindow) {
            this._pitemWindow.setCategory(this.currentSymbol());
        }
    };

    Window_ItemCategory.prototype.makeCommandList = function() {
        this.addCommand(TextManager.item,    'item');
        this.addCommand(TextManager.weapon,  'weapon');
        this.addCommand(TextManager.armor,   'armor');
        if (c_vis == 'true'){
            this.addCommand(TextManager.keyItem, 'keyItem');
        };
    };

    Window_ItemCategory.prototype.setItemWindow = function(itemWindow) {
        this._sitemWindow = itemWindow;
        this._pitemWindow = itemWindow;
        this.update();
    };
    Window_ItemCategory.prototype.setSItemWindow = function(itemWindow) {
        this._sitemWindow = itemWindow;
        this.update();
    };
    Window_ItemCategory.prototype.setPItemWindow = function(itemWindow) {
        this._pitemWindow = itemWindow;
        this.update();
    };

    //-----------------------------------------------------------------------------
    // Window_ItemList_Paty
    //-----------------------------------------------------------------------------

    function Window_ItemList_Paty() {
        this.initialize.apply(this, arguments);
    }

    Window_ItemList_Paty.prototype = Object.create(Window_ItemList.prototype);
    Window_ItemList_Paty.prototype.constructor = Window_ItemList;

    Window_ItemList_Paty.prototype.maxCols = function() {
        return 1;
    };

        Window_ItemList_Paty.prototype.isCurrentItemEnabled = function() {
            return this.item();
        };
    Window_ItemList_Paty.prototype.isEnabled = function(item) {
        return true;
    };

    Window_ItemList_Paty.prototype.makeItemList = function() {
        this._data = $gameParty.allItems().filter(function(item) {
            return this.includes(item);
        }, this);
        if (this.includes(null)) {
            this._data.push(null);
        }
    };

    Window_ItemList_Paty.prototype.selectLast = function() {
        var index = this._data.indexOf($gameParty.lastItem());
        this.select(index >= 0 ? index : 0);
    };

    Window_ItemList_Paty.prototype.drawItemNumber = function(item, x, y, width) {
        if (this.needsNumber()) {
            this.drawText(':', x, y, width - this.textWidth('00'), 'right');
            this.drawText($gameParty.numItems(item), x, y, width, 'right');
        }
    };
    Window_ItemList_Paty.prototype.getitem = function() {
        var index = this.index();
        var item = this._data[index];
        return this._data && index >= 0 ? this._data[index] : null;
    };
    Window_ItemList_Paty.prototype.getnum = function() {
        var index = this.index();
        var item = this._data[index];
        return $gameParty.numItems(item)
    };

    //-----------------------------------------------------------------------------
    // Window_ItemList_Storage
    //-----------------------------------------------------------------------------

    function Window_ItemList_Storage() {
        this.initialize.apply(this, arguments);
    }

    Window_ItemList_Storage.prototype = Object.create(Window_ItemList.prototype);
    Window_ItemList_Storage.prototype.constructor = Window_ItemList_Storage;

    Window_ItemList_Storage.prototype.maxCols = function() {
        return 1;
    };

        Window_ItemList_Storage.prototype.isCurrentItemEnabled = function() {
            return this.item();
        };
       
    Window_ItemList_Storage.prototype.isEnabled = function(item) {
        return true
    };

    Window_ItemList_Storage.prototype.makeItemList = function() {
        this._data = $gameStorage.allItems().filter(function(item) {
            return this.includes(item);
        }, this);
        if (this.includes(null)) {
            this._data.push(null);
        }
    };

    Window_ItemList_Storage.prototype.selectLast = function() {
        var index = this._data.indexOf($gameStorage.lastItem());
        this.select(index >= 0 ? index : 0);
    };

    Window_ItemList_Storage.prototype.drawItemNumber = function(item, x, y, width) {
        if (this.needsNumber()) {
            this.drawText(':', x, y, width - this.textWidth(l_pos), 'right');
            this.drawText($gameStorage.numItems(item), x, y, width, 'right');
        }
    };

    Window_ItemList_Storage.prototype.getitem = function() {
        var index = this.index();
        var item = this._data[index];
        return this._data && index >= 0 ? this._data[index] : null;
    };
    Window_ItemList_Storage.prototype.getnum = function() {
        var index = this.index();
        var item = this._data[index];
        return $gameStorage.numItems(item)
    };
    //-----------------------------------------------------------------------------
    // Window_StorageNumber
    //-----------------------------------------------------------------------------

    function Window_StorageNumber() {
        this.initialize.apply(this, arguments);
    }

    Window_StorageNumber.prototype = Object.create(Window_ShopNumber.prototype);
    Window_StorageNumber.prototype.constructor = Window_StorageNumber;

    Window_StorageNumber.prototype.initialize = function(x, y, height) {
        var width = this.windowWidth();
        Window_Selectable.prototype.initialize.call(this, x, y, width, num_h);
        this._item = null;
        this._max = 1;
        this._number = 1;
        this._currencyUnit = TextManager.currencyUnit;
    };

    Window_StorageNumber.prototype.windowWidth = function() {
        return num_w;
    };

    Window_StorageNumber.prototype.setup = function(item, max, mode) {
        this._item = item;
        this._max = Math.floor(max);
        this._mode = mode;
        this._gameob = (mode == 0 ? $gameStorage:$gameParty);
        this._number = (this._gameob.maxItems() == this._gameob.numItems(this._item)) ? 0 : 1;
        this.refresh();
    };

    Window_StorageNumber.prototype.refresh = function() {
        this.contents.clear();
        this.drawItemName(this._item, 0, 0);
        this.drawMultiplicationSign();
        this.drawNumber();
    };

    Window_StorageNumber.prototype.changeNumber = function(amount) {
        var lastNumber = this._number;
        var maxtemp = (this._mode == 0 ? this._gameob.maxItems():this._gameob.maxItems());
        var temp = (this._number + amount).clamp(1, this._max);
        if ((this._gameob.numItems(this._item) + temp) <= maxtemp){
            this._number = temp;
        }else{
            this._number = (maxtemp - this._gameob.numItems(this._item));
        }
        if (this._number !== lastNumber) {
            SoundManager.playCursor();
            this.refresh();
        }
    };

    Window_StorageNumber.prototype.tradeItem = function() {
        return [this._item,this._number];
    };

    Window_StorageNumber.prototype.itemY = function() {
        return 0
    };

    Window_StorageNumber.prototype.maxDigits = function() {
        return 2;
    };

})();[/pre][/fold]

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
12 小时
注册时间
2016-2-10
回帖
6
 楼主| 发表于 2016-2-13 12:51:33 | 显示全部楼层
本帖最后由 泛苍空 于 2016-2-16 15:19 编辑
tseyik 发表于 2016-2-13 12:35
http://midori.wp.xdomain.jp/?cat=15

プラグインコマンド 「Storage」をイベント


那个,能详细一点吗?新人不会。。。
  

能把脚本给我吗?复制出来在游戏里有乱码! [X2ILVQAJDC7{B35Y{GZJ1S.png

我找到了一个仓库插件,但还有些小问题
传送门https://rpg.blue/thread-389347-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部