//============================================================================= // RPG Maker MZ - Conditional Choices // // Copyright 2024 Panzer-IV. All rights reserved. // This source code or any portion thereof must not be // reproduced or used without licensed in any manner whatsoever. //============================================================================= /*: * @target MZ * @plugindesc 条件付き選択肢 * @author 四号戦車 * @base PluginCommonBase * @orderAfter PluginCommonBase * * @help SceneLewdStatus.js * * Version: 0.0.2 * * 条件付き選択肢 * * 特定の選択肢を条件付きで入れたり消したりできます。 * * @command showConditionalChoices * @text 条件付き選択肢の表示 * @desc 選択肢の表示を条件付きで行えます * * @arg choices * @text 選択肢 * @desc 条件付きの選択肢 * @type struct[] * @defult [] * * @arg background * @text 背景 * @desc 選択肢の背景 * @type select * @default 0 * @option ウィンドウ * @value 0 * @option 暗くする * @value 1 * @option 透明 * @value 2 * * @arg position * @text ウィンドウ位置 * @desc ウィンドウの位置 * @type select * @default 2 * @option 左 * @value 0 * @option 中 * @value 1 * @option 右 * @value 2 * * @arg defaultOption * @text デフォルト * @desc デフォルトの選択肢 * @type select * @default 0 * @option なし * @value -1 * @option 選択肢#1 * @value 0 * @option 選択肢#2 * @value 1 * @option 選択肢#3 * @value 2 * @option 選択肢#4 * @value 3 * @option 選択肢#5 * @value 4 * @option 選択肢#6 * @value 5 * * @arg cancelOption * @text キャンセル * @desc キャンセル時の処理 * @type select * @default 1 * @option 指定イベント * @value -2 * @option 禁止 * @value -1 * @option 選択肢#1 * @value 0 * @option 選択肢#2 * @value 1 * @option 選択肢#3 * @value 2 * @option 選択肢#4 * @value 3 * @option 選択肢#5 * @value 4 * @option 選択肢#6 * @value 5 * * @arg cancelEvent * @text キャンセル時のイベント * @type common_event * @default 0 */ /*~struct~ConditionalOption: * * @param label * @text 表示テキスト(ラベル) * @desc 表示する文章のリソースラベル * @type string * @default * * @param text * @text 表示テキスト * @desc 表示する文章 * ラベルが指定されている場合無視されます * @type string * @default * * @param switchCondition * @text 表示条件スイッチ * @desc ONの時だけ条件になります * @type switch * @dedault 0 * * @param event * @text 選択時のイベント * @type common_event * @default 0 * */ (() => { "use strict"; //======================================================================== // プラグイン定義 //======================================================================== const pluginName = "ConditionalChoices"; const script = document.currentScript; const param = PluginManagerEx.createParameter(script); //======================================================================== // 定数定義 //======================================================================== //======================================================================== // コアスクリプト変更部 (Game_Interpreter) //======================================================================== Game_Interpreter.prototype.setupConditionalChoices = function(params) { const choices = params.choices.filter(option => { const switchId = option.switchCondition; return PluginUtils.getSwitch(switchId, true); }).map(option => { if (!!option.label && label.length > 0) { return TextResource.getText(label); } else { return option.text; } }); const defaultType = params.defaultOption; const background = params.background; const positionType = params.position; const cancelType = params.cancelOption; $gameMessage.setChoices(choices, defaultType, cancelType); $gameMessage.setChoiceBackground(background); $gameMessage.setChoicePositionType(positionType); $gameMessage.setChoiceCallback(index => { if (index === -2) { // キャンセル時指定のイベント PluginUtils.waitCommonEvent(params.cancelEvent); } else if (index >= 0) { PluginUtils.waitCommonEvent(params.choices[index]); } }); }; const _Game_Interpreter_prototype_command101 = Game_Interpreter.prototype.command101; Game_Interpreter.prototype.command101 = function(params) { if ($gameMessage.isBusy()) { return false; } const result = _Game_Interpreter_prototype_command101.apply(this, arguments); const nextCommand = this._list[this._index + 1]; if (nextCommand.code === 357) { // 次がプラグインコマンド const name = nextCommand.parameters[0]; const functionName = nextCommand.parameters[1]; if (name === pluginName && functionName === 'showConditionalChoices') { // 次がこのプラグインの選択肢コマンド const params = PluginManagerEx.createCommandArgs(nextCommand.parameters[3]); this._index++; this.setupConditionalChoices(params); } return true; } return result; }; //======================================================================== // プラグインコマンド //======================================================================== PluginManagerEx.registerCommand(script, 'showConditionalChoices', args => { if (!!args.interpreter) { args.interpreter.setupConditionalChoices(args); args.interpreter.setWaitMode("message"); } }); })();