prison-brave/js/plugins/ConditionalChoices.js
2025-08-28 10:38:20 -05:00

211 lines
6.2 KiB
JavaScript

//=============================================================================
// 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<ConditionalOption>[]
* @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");
}
});
})();