【解決済み】徐々に選択肢を増やす方法について。

赤ずきん/りれふ
記事: 7
登録日時: 2023年3月25日(土) 09:05

【解決済み】徐々に選択肢を増やす方法について。

投稿記事by 赤ずきん/りれふ » 2023年3月25日(土) 09:12

質問を読んでくれてありがとうございます。私は、指定したスイッチを押して選択肢が増えるという機能を追加したいと思っています。しかし、選択肢を徐々に増やすイベントを作ろうとした時、”徐々”に追加ということが出来ません。ひとつフラグを立てると、その立ったフラグの選択肢を表示させたいのですが、フラグ1とフラグ2がある場合、フラグをひとつ立てたら、イベントをひとつ呼び出してあげる必要があります。その時にフラグ1は選択肢1、フラグ2は選択肢2と紐づけることが出来ません。いい方法はありませんでしょうか?説明が下手なので分かりにくかったらすみません。できる限り答えます。
追記 無事解決できました。スクリプトはあまり詳しくないのでプラグインを使ってみました。みなさん回答ありがとうございました。
最後に編集したユーザー 赤ずきん/りれふ on 2023年3月25日(土) 22:33 [ 編集 1 回目 ]

アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: 徐々に選択肢を増やす方法について。

投稿記事by WTR » 2023年3月25日(土) 11:44

選択肢の表示では簡単ではなさそうです。
ちょっと見た目は変わってしまいますが、アイテム選択の処理で代用するのはどうでしょう。

フラグ1が立った時、同時に対応する隠しアイテムを入手させる。
フラグ2以降も同様に。

アイテム選択の処理で隠しアイテムの一覧を表示して、選択結果を変数に格納する。

変数の値に応じて条件分岐を作る。

コード: 全て選択

◆アイテムの増減:フラグ① + 1
◆アイテムの増減:フラグ② + 1
◆アイテムの増減:フラグ③ + 1
◆アイテムの増減:フラグ④ + 1
◆アイテム選択の処理:アイテム選択結果, 隠しアイテムA
◆条件分岐:アイテム選択結果 = 1
  ◆文章:なし, なし, ウィンドウ, 下
  :  :フラグ①が選択されたときの処理
  ◆
:分岐終了
◆条件分岐:アイテム選択結果 = 2
  ◆文章:なし, なし, ウィンドウ, 下
  :  :フラグ②が選択されたときの処理
  ◆
:分岐終了
◆条件分岐:アイテム選択結果 = 3
  ◆文章:なし, なし, ウィンドウ, 下
  :  :フラグ③が選択されたときの処理
  ◆
:分岐終了
◆条件分岐:アイテム選択結果 = 4
  ◆文章:なし, なし, ウィンドウ, 下
  :  :フラグ④が選択されたときの処理
  ◆
:分岐終了
最後に編集したユーザー WTR on 2023年3月25日(土) 17:11 [ 編集 1 回目 ]
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 徐々に選択肢を増やす方法について。

投稿記事by 名無し蛙 » 2023年3月25日(土) 15:28

一応、スクリプトで選択肢の表示とラベルジャンプを組み合わせれば可能だと思います。

ツクマテ用ss5.png

雛形を書くならこんな感じですね。
スクリプト部分を抜粋するとコードはこれです。

コード: 全て選択

const choices = [];
const cancelChoice = "キャンセル選択";
choices.push ("選択肢1");
if ($gameSwitches.value(2)) choices.push ("選択肢2"); // スイッチ2がONの場合選択肢追加
const cancelType = choices.length;
const defaultType = 0; // 初期選択位置
const positionType = 2; // ウィンドウ位置
const background = 0; // ウィンドウ背景
$gameMessage.setChoices(choices, defaultType, cancelType);
$gameMessage.setChoiceBackground(background);
$gameMessage.setChoicePositionType(positionType);
$gameMessage.setChoiceCallback(n => {
    const selectChoice = choices.concat([cancelChoice])[n];
    this.command119([selectChoice]);
});
this.setWaitMode("message");

コードのconst cancelType = choices.length;よりも下の部分はとりあえず無視してもらって構いません。
choices.pushの部分を増やせば増やすほど選択肢が増えていき
選択決定された文字列を基にラベルジャンプ処理に移行する、というコードです。
if ($gameSwitches.value(2)) choices.push ("選択肢2"); // スイッチ2がONの場合選択肢追加
等と書く事で条件付きで選択肢を増やす事が出来ます。
キャンセルボタンが押された場合はcancelChoiceの文字列にラベルジャンプします。
この辺を適当に調節すれば望みの仕様になるのではないかなと。

追記:需要があるか分からないですけど
ラベルを使わずに直接コモンイベントを呼びだす変形版も思いつきました。

コード: 全て選択

const cancelChoice = {text: "キャンセル選択", commonId: 4};
const choices = [];
choices.push ({text: "選択肢1", commonId: 1});
if ($gameSwitches.value(2)) choices.push ({text: "選択肢2", commonId: 2});
if ($gameSwitches.value(3)) choices.push ({text: "選択肢3", commonId: 3});
const defaultType = 0; // 初期選択位置
const cancelType = choices.length;
$gameMessage.setChoices(choices.map(c => c['text']), defaultType, cancelType);
$gameMessage.setChoiceCallback(n => {
    const selectCommonId = choices.concat([cancelChoice])[n]['commonId'];
    this.setupChild($dataCommonEvents[selectCommonId].list, this._eventId);
});
this.setWaitMode("message");

基本的な構造は上のコードと同じです。
choices.push ({text: "選択肢1", commonId: 1});の部分を増やしていけば選択肢が増えます。
textの部分が選択肢の表示テキスト、
commonIdの部分が選択決定した時に呼び出されるコモンイベントIDですね。
ラベルジャンプでswitch文を再現するよりもこちらの方がまだ実用的かなと。
ついでにデフォルト値から変更する必要がない箇所は指定する必要もないので省略しました。
最後に編集したユーザー 名無し蛙 on 2023年3月25日(土) 21:26 [ 編集 2 回目 ]
アバター
めそたね
記事: 9
登録日時: 2023年3月22日(水) 02:33
連絡を取る:

Re: 徐々に選択肢を増やす方法について。

投稿記事by めそたね » 2023年3月25日(土) 16:12

赤ずきん/りれふ さんが書きました:私は、指定したスイッチを押して選択肢が増えるという機能を追加したいと思っています。しかし、選択肢を徐々に増やすイベントを作ろうとした時、”徐々”に追加ということが出来ません。ひとつフラグを立てると、その立ったフラグの選択肢を表示させたいのですが、フラグ1とフラグ2がある場合、フラグをひとつ立てたら、イベントをひとつ呼び出してあげる必要があります。その時にフラグ1は選択肢1、フラグ2は選択肢2と紐づけることが出来ません。いい方法はありませんでしょうか?

最近自分も導入したプラグインに木星ペンギン様作の「選択肢拡張プラグイン」というものがあります。
その中にスイッチや変数で選択肢の有無を指定できる機能がありますが、これで解決しませんでしょうか?
「徐々に追加」というのが何を意味しているのかうまく汲み取れなかったのでもしかしたら希望しているものじゃないかもしれませんが・・・。

▼プラグインの機能の1つですが、if(条件)で選択肢の表示/非表示を指定できます

コード: 全て選択

▼ 項目が表示される条件の設定
 - 選択肢の文章中に
     if(条件)
   と入れ、その条件が偽になると項目が表示されなくなります。
 - 『デフォルト』の項目が表示されない場合の動作は、
   プラグインパラメータの[Disabled Index]にて設定できます。
 - 『キャンセル』の項目が表示されない場合、禁止と同じ処理をします。
 - 条件内では s でスイッチ、v で変数を参照できます。
    例:if(s[1]) とした場合
         => スイッチ1番がONで表示、OFFで非表示。
       if(!s[2]) とした場合
         => スイッチ2番がOFFで表示、ONで非表示。
       if(v[5]>0) とした場合
         => 変数5番が0より大きければ表示、0以下で非表示。
初心者がRPGツクールMZでゲーム制作中(2023.2開始)
https://twitter.com/mesotane

“MZ:質問” へ戻る