/*---------------------------------------------------------- アイテム合成(ショップ)スクリプト ※現状、拠点のショップにのみ設定できます。場所イベントや戦闘準備の店では設定できません。 使用方法: ①拠点のショップのカスタムパラメータを設定してください。 { shopType:1, priceRate:1 } type:1で合成ショップ(0または省略時は通常ショップ) priceRate:購入価格係数(省略時は1倍)。無料にしたい場合は0にしてください ②合成対象のアイテムのカスタムパラメータを設定してください。 { material:[{id:0, value:1}, {id:100001, value:2}] } material:素材の種類の数だけidとvalueのセットを設定してください id:武器orアイテムID, value:必要個数 武器IDはそのまま、アイテムIDの場合は+100000してください。 設定例: ID:0の武器を1個、ID:1のアイテムを2個 material:[{id:0, value:1}, {id:100001, value:2}] ID:3の武器を1個、ID:4の武器を2個、ID:5のアイテムを1個 material:[{id:3, value:1}, {id:4, value:2}, {id:100005, value:1}] ■作成者 wiz ■対応バージョン SRPG Studio Version:1.198 ----------------------------------------------------------*/ (function() { StringTable.ShopLayout_SelectSynthesis = '合成'; StringTable.Material = '必要素材'; StringTable.Synthesis_switch = '表示切替:A'; //色々--------------------------------------------------------------------------------------- //とりあえずAキーを切替用にする //他のキー等はヘルプの「game.ini仕様」を参照 InputControl.isSwitchAction = function() { return root.isInputAction(InputType.BTN5); }; //表示切替の文字描画 TextRenderer.drawSwitchText = function(x, y) { var color = ColorValue.LIGHT; var font = root.queryTextUI('default_window').getFont();; this.drawKeywordText(x, y - 20, StringTable.Synthesis_switch, -1, color, font); }; //カスタムパラメータ取得 ItemControl.getMaterial = function(item) { if(item === null) { return []; } if(typeof item.custom.material === 'undefined') { return []; } return item.custom.material; }; // ItemIdValue.BASE = 100000 ItemControl.getItemDataFromId = function(id) { var item; if(id < ItemIdValue.BASE) { item = root.getBaseData().getWeaponList().getDataFromId(id); } else { item = root.getBaseData().getItemList().getDataFromId(id - ItemIdValue.BASE); } //root.duplicateItem(item); return item; }; //id番のアイテムがストックにいくつ存在するか(回数は考慮しない) StockItemControl.getItemCountFromId = function(id) { var i, item; var count = StockItemControl.getStockItemCount(); var targetItem = ItemControl.getItemDataFromId(id); var value = 0; var isMatch = false; for(i=0; i= itemGold && this._isMaterialOK(); }, _isMaterialOK: function() { var i, count; var materialArray1 = this.getParentInstance().getMaterialRequireArray(); var materialArray2 = this.getParentInstance().getMaterialStockArray(); count = materialArray1.length; for(i=0; i materialArray2[i].value) { return false; } } return true; } }); var BuyItemWindow2 = defineObject(BuyItemWindow, { getScrollbarObject: function() { return BuyScrollbar2; } }); var BuyScrollbar2 = defineObject(BuyScrollbar, { //価格変更 _getPrice: function(item) { var price = BuyScrollbar._getPrice.call(this, item); price = Math.floor(price * this.getParentInstance().getParentInstance().getPriceRate()); return price; } }); //素材表示用ウィンドウ var MaterialWindow = defineObject(BaseWindow, { _item: null, _windowHeight: 0, _isWindowEnabled: false, drawWindowContent: function(x, y) { if (this._item === null) { return; } var i; var materialArray1 = this.getParentInstance().getMaterialRequireArray(); var materialArray2 = this.getParentInstance().getMaterialStockArray(); var count = materialArray1.length; var textui = this.getTextUI(); var color0 = ColorValue.KEYWORD; var color = textui.getColor(); var font = textui.getFont(); var alpha, materialItem; var num1, num2; var x2 = x + GraphicsFormat.ICON_WIDTH + 160; var dx = [0, 15, 30]; TextRenderer.drawKeywordText(x, y, StringTable.Material, -1, color0, font); y += this.getSpaceY(); for (i = 0; i < count; i++) { if(materialArray1[i].value > materialArray2[i].value) { alpha = 120; } else { alpha = 255; } materialItem = ItemControl.getItemDataFromId(materialArray1[i].id); ItemRenderer.drawItemAlpha(x, y, materialItem, color, font, false, alpha); // 必要数/所持数(表示される最大値は99とする) num1 = materialArray1[i].value; if(num1 > 99) { num1 = 99; } num2 = materialArray2[i].value; if(num2 > 99) { num2 = 99; } NumberRenderer.drawNumber(x2 + dx[0], y, num1); TextRenderer.drawKeywordText(x2 + dx[1], y, '/', -1, color, font); NumberRenderer.drawNumber(x2 + dx[2], y, num2); y += ItemInfoRenderer.getSpaceY(); } }, getWindowWidth: function() { return ItemRenderer.getItemWindowWidth(); }, getWindowHeight: function() { return this._windowHeight; }, setInfoItem: function(item) { this._item = item; this._windowHeight = 0; if (this._item === null) { // ウインドウの枠などが描画されないようにする this.enableWindow(false); return; } var count = this.getParentInstance().getMaterialRequireArray().length; this._windowHeight = (count + 1) * ItemRenderer.getItemHeight() + DefineControl.getWindowYPadding(); this.enableWindow(true); }, getInfoItem: function() { return this._item; }, getSpaceY: function() { return 20; }, getTextUI: function() { return root.queryTextUI('default_window'); } }); })();