brainwashing-school/js/plugins/EventItemCondition.js
2025-05-30 08:36:40 -05:00

125 lines
4.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// EventItemCondition.js
// ----------------------------------------------------------------------------
// (C)2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.1 2024/02/07 競合対策
// 1.0.0 2024/02/07 MZ向けに仕様を再検討
// ----------------------------------------------------------------------------
// [Blog] : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc アイテム選択の表示条件プラグイン
* @target MZ
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/EventItemCondition.js
* @base PluginCommonBase
* @orderAfter PluginCommonBase
* @author トリアコンタン
*
* @param DefaultVisible
* @text デフォルト表示可否
* @desc パラメータが設定されていないアイテムの表示可否です。無効にすると設定がないアイテムはすべて表示されません。
* @default true
* @type boolean
*
* @param RefreshSwitchId
* @text 再描画スイッチID
* @desc 指定したIDのスイッチがONになるとウィンドウを再描画します。描画後、スイッチは自動でOFFになります。
* @default 0
* @type switch
*
* @param ConditionList
* @text 表示条件リスト
* @desc アイテムごとの表示条件を設定します。
* @default []
* @type struct<Condition>[]
*
* @help EventItemCondition.js
*
* イベントコマンド「アイテム選択の処理」において
* 表示可否の条件をアイテムごとに設定できます。
*
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
* 以下のフォルダに格納されています。
* dlc/BasicResources/plugins/official
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態商用、18禁利用等
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
/*~struct~Condition:
* @param itemId
* @text アイテムID
* @desc 条件を設定するアイテムのIDです。
* @default 1
* @type item
*
* @param switchId
* @text スイッチID
* @desc 条件となるスイッチのIDです。
* @default 0
* @type switch
*
* @param script
* @text スクリプト
* @desc 条件となるスクリプトです。
* @default
* @type multiline_string
*/
(()=> {
'use strict';
const script = document.currentScript;
const param = PluginManagerEx.createParameter(script);
const _Window_EventItem_includes = Window_EventItem.prototype.includes;
Window_EventItem.prototype.includes = function(item) {
return _Window_EventItem_includes.apply(this, arguments) && this.isOkEventItem(item);
};
Window_EventItem.prototype.findEventItemCondition = function(item) {
return DataManager.isItem(item) && param.ConditionList.find(condition => condition.itemId === item.id);
};
Window_EventItem.prototype.isOkEventItem = function(item) {
const condition = this.findEventItemCondition(item);
if (condition) {
return this.isOkEventItemSwitch(condition) && this.isOkEventItemScript(condition);
} else {
return param.DefaultVisible;
}
};
Window_EventItem.prototype.isOkEventItemSwitch = function(condition) {
return !condition.switchId || $gameSwitches.value(condition.switchId);
};
Window_EventItem.prototype.isOkEventItemScript = function(condition) {
return !condition.script || eval(condition.script);
};
const _Window_EventItem_update = Window_EventItem.prototype.update;
Window_EventItem.prototype.update = function() {
_Window_EventItem_update.apply(this, arguments);
this.updateAutoRefresh();
};
Window_EventItem.prototype.updateAutoRefresh = function() {
if ($gameSwitches.value(param.RefreshSwitchId) && this.openness === 255) {
$gameSwitches.setValue(param.RefreshSwitchId, false);
this.refresh();
this.select(0);
}
};
})();