Files
Superproject1/js/plugins/KeyItemNumber.js
alexpolo1 9b37614c57 3
3
2023-04-11 22:11:31 +02:00

145 lines
4.7 KiB
JavaScript

//=============================================================================
// KeyItemNumber.js
//=============================================================================
/*:
* @plugindesc display on/off the number of key items.
* @author Sasuke KANNAZUKI
*
* @param KeyItem
* @desc whether display the number at menu window.
* 0:not display, 1:always display, 2:display only plural items
* @default 0
*
* @param MessageWindow
* @desc whether display the number at message window.
* 0:not display, 1:always display, 2:display only plural items
* @default 0
*
* @help
* Plugin Command:
* KeyItemNumber arg0 arg1
* arg0 must be a number 1, 2, 3, or 4
* 1:normal item, 2:important item, 3:hidden item A, 4:hidden item B.
* arg1 must be a number 0, 1, or 2
* 0:not display, 1:always display, 2:display only plural items
*
* if it's not defined, MessageWindow number is used.
* ex.
* KeyItemNumber 3 0 # item number won't be displayed at hidden item A list.
* KeyItemNumber 1 1 # item number will be displayed at normal item list.
*/
/*:ja
* @plugindesc 「大事なもの」の個数表示の設定
* @author 神無月サスケ
*
* @param KeyItem
* @desc メニューの「大事なもの」で個数を表示するか。
* 0:表示しない, 1:表示する, 2:複数アイテムのみ表示
* @default 0
*
* @param MessageWindow
* @desc イベントコマンド「アイテム選択の処理」で個数を表示するか。
* 0:表示しない, 1:表示する, 2:複数アイテムのみ表示
* @default 0
*
* @help
* プラグインコマンド:
* 「アイテム選択の処理」で種類ごとに分けたい場合に呼び出して下さい。
* KeyItemNumber arg0 arg1
* arg0 は 1, 2, 3, または 4 です。
* 1:通常アイテム, 2:大事なもの, 3:隠しアイテムA, 4:隠しアイテムB
* arg1 は 0, 1, または 2 です。
* 0:表示しない, 1:表示する, 2:複数アイテムのみ表示
*
* プラグインコマンドを呼び出さない場合、MessageWindow の設定になります。
* 例:
* KeyItemNumber 3 0 # 隠しアイテムA では 個数を表示しない
* KeyItemNumber 1 1 # 通常アイテムでは 個数を表示する
*/
(function() {
var parameters = PluginManager.parameters('KeyItemNumber');
var atKeyItem = Number(parameters['KeyItem'] || 0); // at Item scene
var atMsgWnd = Number(parameters['MessageWindow'] || 0); // at Event Command
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'KeyItemNumber') {
var itypeId = args[0];
var status = args[1]; // rule of itemNumberDisplay
$gameSystem.keyItemNumber()[itypeId] = status;
}
};
//
// an array definition at $gameSystem
//
var _Game_System_initialize =
Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
_Game_System_initialize.call(this);
this.initKeyNumber();
};
Game_System.prototype.initKeyNumber = function() {
this._keyItemNumber = [null, null, null, null, null];
};
Game_System.prototype.keyItemNumber = function() {
if(!this._keyItemNumber){
this.initKeyNumber();
};
return this._keyItemNumber;
};
//
// at item scene, whether display item number or not
//
var _Window_ItemList_needsNumber =
Window_ItemList.prototype.needsNumber;
Window_ItemList.prototype.needsNumber = function() {
var original = _Window_ItemList_needsNumber.call(this);
if(this._category !== 'keyItem') {
return original;
}
return atKeyItem != 0;
};
//
// current display mode of EventItem window.
//
Window_EventItem.prototype.currentDispMode = function() {
var itype = $gameMessage.itemChoiceItypeId();
return Number($gameSystem.keyItemNumber()[itype] || atMsgWnd);
};
//
// at message window, whether display item number or not
//
Window_EventItem.prototype.needsNumber = function() {
return this.currentDispMode() != 0;
};
//
// draw item (includes behavior if item number >= 2)
//
var _Window_ItemList_drawItemNumber =
Window_ItemList.prototype.drawItemNumber;
Window_ItemList.prototype.drawItemNumber = function(item, x, y, width) {
var isEvent = (this instanceof Window_EventItem);
var status = isEvent ? this.currentDispMode() : atKeyItem;
if((this._category == 'keyItem' || isEvent) &&
status == 2 && $gameParty.numItems(item) <= 1) {
return; // return without drawing number
}
_Window_ItemList_drawItemNumber.call(this, item, x, y, width);
};
})();