207 lines
7.3 KiB
JavaScript
207 lines
7.3 KiB
JavaScript
/*---------------------------------------------------------------------------*
|
||
* TorigoyaMZ_CommonMenu.js v.1.2.0
|
||
*---------------------------------------------------------------------------*
|
||
* 2022/04/17 02:48 (JST)
|
||
*---------------------------------------------------------------------------*
|
||
* Ruたん ( @ru_shalm )
|
||
* https://torigoya-plugin.rutan.dev
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
/*:
|
||
* @target MZ
|
||
* @plugindesc メニューからコモンイベント呼び出しプラグイン (v.1.2.0)
|
||
* @author Ruたん(ru_shalm)
|
||
* @license public domain
|
||
* @version 1.2.0
|
||
* @url https://raw.githubusercontent.com/rutan/torigoya-rpg-maker-plugin/gh-pages/TorigoyaMZ_CommonMenu.js
|
||
* @help
|
||
* メニューからコモンイベント呼び出しプラグイン (v.1.2.0)
|
||
* https://torigoya-plugin.rutan.dev
|
||
*
|
||
* メニューにコモンイベントを呼び出す項目を追加します
|
||
*
|
||
* ------------------------------------------------------------
|
||
* ■ 設定方法
|
||
* ------------------------------------------------------------
|
||
*
|
||
* このプラグインの設定からメニュー項目を登録してください。
|
||
* ここでの並び順の順番で画面に表示されます。
|
||
*
|
||
* ------------------------------------------------------------
|
||
* ■ PluginCommonBase.js 連携
|
||
* ------------------------------------------------------------
|
||
*
|
||
* このプラグインは PluginCommonBase.js に対応しています。
|
||
* PluginCommonBase.js を導入している場合、
|
||
* メニュー項目の名前に変数(\V[123])など一部の制御文字を利用できます。
|
||
*
|
||
* @param base
|
||
* @text ■ 基本設定
|
||
*
|
||
* @param baseItems
|
||
* @text メニューに追加する項目
|
||
* @type struct<MenuItem>[]
|
||
* @parent base
|
||
* @default ["{\"name\": \"コモンイベント\",\"commonEvent\": \"1\",\"switchId\": \"0\",\"visibility\": \"true\",\"note\": \"\"}"]
|
||
*/
|
||
|
||
/*~struct~MenuItem:
|
||
* @param name
|
||
* @text 項目名
|
||
* @desc メニューに表示される項目の名前
|
||
* @type string
|
||
* @default
|
||
*
|
||
* @param commonEvent
|
||
* @text 呼び出すコモンイベント
|
||
* @desc メニュー選択時に呼び出すコモンイベント
|
||
* @type common_event
|
||
* @default 0
|
||
*
|
||
* @param switchId
|
||
* @text 有効スイッチ
|
||
* @desc このスイッチがONのときのみ選択できるようにします
|
||
* なしの場合は、常に選択できます
|
||
* @type switch
|
||
* @default 0
|
||
*
|
||
* @param visibility
|
||
* @text 無効時に表示するか
|
||
* @desc 有効スイッチがONじゃないときに
|
||
* 項目をメニューに表示するか設定できます
|
||
* @type boolean
|
||
* @on 表示する
|
||
* @off 表示しない
|
||
* @default true
|
||
*
|
||
* @param note
|
||
* @text メモ
|
||
* @desc メモ欄です。
|
||
* ツクールのメモ欄同様に使えます。
|
||
* @type multiline_string
|
||
* @default
|
||
*/
|
||
|
||
(function () {
|
||
'use strict';
|
||
|
||
const Torigoya = (window.Torigoya = window.Torigoya || {});
|
||
|
||
function getPluginName() {
|
||
const cs = document.currentScript;
|
||
return cs ? cs.src.split('/').pop().replace(/\.js$/, '') : 'TorigoyaMZ_CommonMenu';
|
||
}
|
||
|
||
function pickStringValueFromParameter(parameter, key, defaultValue = '') {
|
||
if (!parameter.hasOwnProperty(key)) return defaultValue;
|
||
return `${parameter[key] || ''}`;
|
||
}
|
||
|
||
function pickIntegerValueFromParameter(parameter, key, defaultValue = 0) {
|
||
if (!parameter.hasOwnProperty(key) || parameter[key] === '') return defaultValue;
|
||
return parseInt(parameter[key], 10);
|
||
}
|
||
|
||
function pickBooleanValueFromParameter(parameter, key, defaultValue = 'false') {
|
||
return `${parameter[key] || defaultValue}` === 'true';
|
||
}
|
||
|
||
function pickStructMenuItem(parameter) {
|
||
parameter = parameter || {};
|
||
if (typeof parameter === 'string') parameter = JSON.parse(parameter);
|
||
return {
|
||
name: pickStringValueFromParameter(parameter, 'name', ''),
|
||
commonEvent: pickIntegerValueFromParameter(parameter, 'commonEvent', 0),
|
||
switchId: pickIntegerValueFromParameter(parameter, 'switchId', 0),
|
||
visibility: pickBooleanValueFromParameter(parameter, 'visibility', 'true'),
|
||
note: pickStringValueFromParameter(parameter, 'note', ''),
|
||
};
|
||
}
|
||
|
||
function readParameter() {
|
||
const parameter = PluginManager.parameters(getPluginName());
|
||
return {
|
||
version: '1.2.0',
|
||
baseItems: ((parameters) => {
|
||
parameters = parameters || [];
|
||
if (typeof parameters === 'string') parameters = JSON.parse(parameters);
|
||
return parameters.map((parameter) => {
|
||
return pickStructMenuItem(parameter);
|
||
});
|
||
})(parameter.baseItems),
|
||
};
|
||
}
|
||
|
||
Torigoya.CommonMenu = {
|
||
name: getPluginName(),
|
||
parameter: readParameter(),
|
||
};
|
||
|
||
(() => {
|
||
/**
|
||
* メニュー項目の追加
|
||
* @param item
|
||
* @param index
|
||
*/
|
||
Window_MenuCommand.prototype.torigoyaCommonMenu_addCommand = function (item, index) {
|
||
const enabled = this.torigoyaCommonMenu_isEnable(item);
|
||
if (!enabled && !this.torigoyaCommonMenu_isVisibility(item)) return;
|
||
|
||
this.addCommand(this.torigoyaCommonMenu_itemName(item), `TorigoyaCommonMenu_${index}`, enabled);
|
||
};
|
||
|
||
/**
|
||
* メニュー項目が有効であるか?
|
||
* @param item
|
||
* @returns {boolean}
|
||
*/
|
||
Window_MenuCommand.prototype.torigoyaCommonMenu_isEnable = function (item) {
|
||
return item.switchId ? $gameSwitches.value(parseInt(item.switchId, 10)) : true;
|
||
};
|
||
|
||
/**
|
||
* メニュー項目が可視状態であるか?
|
||
* @param item
|
||
* @returns {boolean}
|
||
*/
|
||
Window_MenuCommand.prototype.torigoyaCommonMenu_isVisibility = function (item) {
|
||
return item.visibility;
|
||
};
|
||
|
||
/**
|
||
* メニュー項目の名前を取得
|
||
* @param item
|
||
* @returns {string}
|
||
*/
|
||
Window_MenuCommand.prototype.torigoyaCommonMenu_itemName = function (item) {
|
||
if (!item) return '';
|
||
|
||
if (window.PluginManagerEx && window.PluginManagerEx.convertEscapeCharacters) {
|
||
return window.PluginManagerEx.convertEscapeCharacters(item.name);
|
||
}
|
||
return item.name;
|
||
};
|
||
|
||
const upstream_Window_MenuCommand_addOriginalCommands = Window_MenuCommand.prototype.addOriginalCommands;
|
||
Window_MenuCommand.prototype.addOriginalCommands = function () {
|
||
upstream_Window_MenuCommand_addOriginalCommands.apply(this);
|
||
|
||
Torigoya.CommonMenu.parameter.baseItems.forEach(this.torigoyaCommonMenu_addCommand.bind(this));
|
||
};
|
||
|
||
const upstream_Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
|
||
Scene_Menu.prototype.createCommandWindow = function () {
|
||
upstream_Scene_Menu_createCommandWindow.apply(this);
|
||
|
||
Torigoya.CommonMenu.parameter.baseItems.forEach((item, i) => {
|
||
const id = parseInt(item.commonEvent, 10);
|
||
if (!id) return;
|
||
|
||
this._commandWindow.setHandler(`TorigoyaCommonMenu_${i}`, () => {
|
||
$gameTemp.reserveCommonEvent(id);
|
||
SceneManager.goto(Scene_Map);
|
||
});
|
||
});
|
||
};
|
||
})();
|
||
})();
|