alter-egoism/js/plugins/CBR_choice.js
2025-11-01 14:17:42 -05:00

166 lines
4.9 KiB
JavaScript

/*:
* @target MZ
* @plugindesc 選択肢で時間切れを実装
* @author
*/
Window_ChoiceList.prototype.makeCommandList = function () {
const choices = $gameMessage.choices();
if ($gameSwitches.value(141)) {
//スイッチがある場合はダミーを削る
for (var i = 0; i < choices.length - 1; i++) {
this.addCommand(choices[i], "choice");
}
} else {
for (const choice of choices) {
this.addCommand(choice, "choice");
}
}
};
Window_ChoiceList.prototype.numVisibleRows = function () {
const choices = $gameMessage.choices();
if ($gameSwitches.value(141)) {
//スイッチがある場合はダミーを削る
return Math.min(choices.length - 1, 10);
} else {
return Math.min(choices.length, 10);
}
};
Window_ChoiceList.prototype.update = function () {
Window_Selectable.prototype.update.call(this);
this.updateCancelButton();
if ($gameSwitches.value(141) && this.active && ConfigManager.selectLimit) {
var v = $gameVariables.value(115);
//$gameScreen.showPicture(15,"choiceGauge",1,1280/2,720/2,100,100,255,0);
if (v < 0) {
//選択肢から+1した場所の物を選択する
this._index = this._list.length;
this.updateInputData();
this.deactivate();
this.callOkHandler();
return;
} else {
if (!$gameScreen._pictures[15] || !$gameScreen._pictures[15].visible) {
$gameScreen.showPicture(15, "choiceGauge", 0, 1280 / 2 - 611 / 2, 720 / 2 - 65 / 2 - 100, 100, 100, 255, 0);
}
$gameScreen._pictures[15]._scaleX = (v / 300) * 100;
v--;
$gameVariables.setValue(115, v);
}
} else {
if ($gameScreen._pictures[15] && $gameScreen._pictures[15].visible) {
$gameScreen.erasePicture(15);
}
}
};
Window_ChoiceList.prototype.deactivate = function () {
Window_Scrollable.prototype.deactivate.call(this);
this.reselect();
$gameSwitches.setValue(141, false);
};
//テキストと選択肢の間に変数やスイッチがあってもメッセージを表示する
Game_Interpreter.prototype.command101 = function (params) {
if ($gameMessage.isBusy()) {
return false;
}
$gameMessage.setFaceImage(params[0], params[1]);
$gameMessage.setBackground(params[2]);
$gameMessage.setPositionType(params[3]);
$gameMessage.setSpeakerName(params[4]);
while (this.nextEventCode() === 401 || this.nextEventCode() === 121) {
//スイッチがあったらトバす
//ならばもうイベントで追加するの、スイッチ・変数じゃなくて注釈とかでよくね?
if (this.nextEventCode() === 121) {
var p = this._list[this._index + 1].parameters;
if (p[0] == 141) {
this._index++;
this._index++;
$gameSwitches.setValue(141, true);
$gameVariables.setValue(115, 300);
} else {
break;
}
} else {
// Text data
this._index++;
$gameMessage.add(this.currentCommand().parameters[0]);
}
}
switch (this.nextEventCode()) {
case 102: // Show Choices
this._index++;
this.setupChoices(this.currentCommand().parameters);
break;
case 103: // Input Number
this._index++;
this.setupNumInput(this.currentCommand().parameters);
break;
case 104: // Select Item
this._index++;
this.setupItemChoice(this.currentCommand().parameters);
break;
}
this.setWaitMode("message");
return true;
};
/*
Game_Interpreter.prototype.command101 = function(params) {
if ($gameMessage.isBusy()) {
return false;
}
$gameMessage.setFaceImage(params[0], params[1]);
$gameMessage.setBackground(params[2]);
$gameMessage.setPositionType(params[3]);
$gameMessage.setSpeakerName(params[4]);
while (this.nextEventCode() === 401) {
// Text data
this._index++;
$gameMessage.add(this.currentCommand().parameters[0]);
}
switch (this.nextEventCode()) {
case 121:
//this._index++;
var p = this._list[this._index + 1].parameters;
if(p[0] == 141){
this._index++;
console.log(this._list[this._index + 1]);
this._index++;
this.setupChoices(this.currentCommand().parameters);
}
break;
case 102: // Show Choices
this._index++;
this.setupChoices(this.currentCommand().parameters);
break;
case 103: // Input Number
this._index++;
this.setupNumInput(this.currentCommand().parameters);
break;
case 104: // Select Item
this._index++;
this.setupItemChoice(this.currentCommand().parameters);
break;
}
this.setWaitMode("message");
return true;
};
*/
Window_ChoiceList.prototype.selectDefault = function () {
if ($gameMessage.choiceDefaultType() < 0) {
this.select(0);
} else {
this.select($gameMessage.choiceDefaultType());
}
};