magical-girls-runa-and-nanami/js/plugins/CGPT_selecthide.js
2026-02-28 12:33:13 -06:00

84 lines
2.8 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.

/*:
* @target MZ
* @plugindesc [MZ] 条件で選択肢を「押下不可」1段目のみ\C[26]表示対応版
* @author you
* @help
* 使い方([選択肢の表示] 直前にスクリプト):
* DisableChoices.clear();
* // 例: 変数38が60未満なら1番目(0)を無効化
* DisableChoices.disableIf(0, $gameVariables.value(38) < 60);
*
* 備考:
* - インデックスは0始まり1番目=0
* - 無効時は半透明の薄いグレー、選択可能時の1段目は\C[26]で描画されます。
*/
(() => {
// ===== 公開API =====
window.DisableChoices = {
clear() { $gameTemp._disabledChoices = []; },
disable(index) {
if (index == null) return;
$gameTemp._disabledChoices ||= [];
$gameTemp._disabledChoices[index] = true;
},
disableIf(index, cond) { if (cond) this.disable(index); }
};
const flags = () => $gameTemp._disabledChoices || [];
// ===== 選択肢作成時に「押下不可」フラグを設定 =====
const _makeCommandList = Window_ChoiceList.prototype.makeCommandList;
Window_ChoiceList.prototype.makeCommandList = function() {
_makeCommandList.call(this);
const f = flags();
for (let i = 0; i < this._list.length; i++) {
if (f[i] && this._list[i]) {
this._list[i].enabled = false; // 押下不可に設定
}
}
};
// ===== 描画時に1段目のみ\C[26]を付与 =====
const _drawItem = Window_ChoiceList.prototype.drawItem;
Window_ChoiceList.prototype.drawItem = function(index) {
const rect = this.itemLineRect(index);
let text = this.commandName(index);
const enabled = this.isCommandEnabled(index);
// 1段目かつ選択可能なら\C[26]を付ける
if (index === 0 && enabled) {
text = "\\C[26]" + text;
}
this.changePaintOpacity(enabled);
this.drawTextEx(text, rect.x, rect.y);
this.changePaintOpacity(true);
};
// ===== 判定の保険(押下ブロック) =====
const _isCommandEnabled = Window_ChoiceList.prototype.isCommandEnabled;
Window_ChoiceList.prototype.isCommandEnabled = function(index) {
if (flags()[index]) return false;
return _isCommandEnabled.call(this, index);
};
// ===== 押下時の最終バズ音 =====
const _processOk = Window_Command.prototype.processOk;
Window_Command.prototype.processOk = function() {
if (this instanceof Window_ChoiceList) {
const i = this.index();
if (flags()[i]) {
this.playBuzzerSound();
return;
}
}
_processOk.call(this);
};
// ===== メッセージ終了時にクリア =====
const _terminateMessage = Scene_Message.prototype.terminateMessage;
Scene_Message.prototype.terminateMessage = function() {
_terminateMessage.call(this);
$gameTemp._disabledChoices = [];
};
})();