【解決済】カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

【解決済】カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by けいのすけ » 2022年12月03日(土) 16:34

いつもお世話になっております。

https://plugin.fungamemake.com/archives/23762

上記のトリアコンタン様カスタムメニュー作成プラグインでアクターの装備を選択肢にしたいと考えています。
お陰様で大分形になってきました。
今回はこちらのプラグインの一覧取得スクリプトでパーティメンバーを選択肢として表示した際にパーティメンバーの一番下にメンバーではない選択肢を入れる事が出来るのか教えて下さい。

 $gameParty.members(); // パーティメンバーで取得したメンバー+別の選択肢「例えば馬車」

1、ハロルド
2、テレーゼ
3、マーシャ
4、ルキウス
5、馬車  ← こんなイメージです。

一覧選択肢の中からメモや変数で項目を非表示にしたりはできるみたいですが別の項目を追加する事は出来ないのでしょうか?
最後に編集したユーザー けいのすけ on 2023年1月27日(金) 21:43 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 450
登録日時: 2018年12月23日(日) 13:55

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by ecf5DTTzl6h6lJj02 » 2022年12月03日(土) 21:32

こんばんは。
けいのすけ さんが書きました:いつもお世話になっております。

https://plugin.fungamemake.com/archives/23762

上記のトリアコンタン様カスタムメニュー作成プラグインでアクターの装備を選択肢にしたいと考えています。
お陰様で大分形になってきました。
今回はこちらのプラグインの一覧取得スクリプトでパーティメンバーを選択肢として表示した際にパーティメンバーの一番下にメンバーではない選択肢を入れる事が出来るのか教えて下さい。

 $gameParty.members(); // パーティメンバーで取得したメンバー+別の選択肢「例えば馬車」

1、ハロルド
2、テレーゼ
3、マーシャ
4、ルキウス
5、馬車  ← こんなイメージです。

一覧選択肢の中からメモや変数で項目を非表示にしたりはできるみたいですが別の項目を追加する事は出来ないのでしょうか?

ウィンドウ一覧の設定項目の中にある、コマンドリストに、項目を設定しておくと、
一覧取得スクリプトで取得されたリストの後に、コマンドリストで設定された項目が追加されます。
ただし、コマンドリストで、追加された項目は、アクターのオブジェクトではありませんので、
アクターウィンドウの隣で、アクターの装備品を表示するような構造になっている場合、
装備品を取得できずにエラーが発生します。
その場合、装備品を描画するウィンドウのほうの一覧取得スクリプトを

コード: 全て選択

$gameVariables.value(1) < $gameParty.members().length ? $gameParty.members()[$gameVariables.value(1)].equips().filter((equip, index) => index > 0) : [];

のように変更する必要があります。
最後に編集したユーザー ecf5DTTzl6h6lJj02 on 2022年12月04日(日) 06:52 [ 編集 2 回目 ]
けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by けいのすけ » 2022年12月04日(日) 03:24

ecf5DTTzl6h6lJj02さん、早速ありがとうございます!
そんな機能まであったなんて!と喜び勇んで挑戦しましたがどうやら上手くいきませんでした。

①アクターの一覧ウインドウ
 このウインドウに一番下にコマンドリストで「袋」という項目を付けてみました。
 一覧取得スクリプトは
 $gameParty.members(); // パーティメンバー です。
②ステータスのウインドウ
 ①のアクターの攻撃力などのステータスを表示してます。
 項目描写スクリプトでthis.drawActorClass(item, r.x, r.y); // アクター職業 や
 this.drawActorLevel(item, r.x+60, r.y+40, r.width, 'left'); // アクターのレベルといった項目 です。
③3つ目のウインドウで一覧取得スクリプト
 $gameParty.members()[$gameVariables.value(301)].armors(); // パーティ変数(301)番目のアクターの防具装備
 項目描写スクリプト
 this.drawItemName(item, r.x, r.y, r.width); // アイテムやスキルの名称
 

教えて頂いたのはこの③のウインドウの一覧取得スクリプトを書き替えるって事ですよね?

$gameVariables.value(301) < $gameParty.members().length ? $gameParty.members()[$gameVariables.value(301)].equips().filter((equip, index) => idex > 0) : [];

としてみたんですがテストプレイ時にゲームウインドウとは別のウインドウが開き(
テストプレイ自体は固まっていない)なにやらズラーっとエラー注意文のようなものが表示されました……。

目標は①でアクターを選ぶと装備品を選択して使ったり渡したりするシーンへ、袋を選ぶと所持アイテムの一覧を選択して装備するシーンへ移行したいと考えています。
ecf5DTTzl6h6lJj02
記事: 450
登録日時: 2018年12月23日(日) 13:55

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by ecf5DTTzl6h6lJj02 » 2022年12月04日(日) 06:41

けいのすけ さんが書きました:ecf5DTTzl6h6lJj02さん、早速ありがとうございます!
そんな機能まであったなんて!と喜び勇んで挑戦しましたがどうやら上手くいきませんでした。

①アクターの一覧ウインドウ
 このウインドウに一番下にコマンドリストで「袋」という項目を付けてみました。
 一覧取得スクリプトは
 $gameParty.members(); // パーティメンバー です。
②ステータスのウインドウ
 ①のアクターの攻撃力などのステータスを表示してます。
 項目描写スクリプトでthis.drawActorClass(item, r.x, r.y); // アクター職業 や
 this.drawActorLevel(item, r.x+60, r.y+40, r.width, 'left'); // アクターのレベルといった項目 です。
③3つ目のウインドウで一覧取得スクリプト
 $gameParty.members()[$gameVariables.value(301)].armors(); // パーティ変数(301)番目のアクターの防具装備
 項目描写スクリプト
 this.drawItemName(item, r.x, r.y, r.width); // アイテムやスキルの名称
 

教えて頂いたのはこの③のウインドウの一覧取得スクリプトを書き替えるって事ですよね?

$gameVariables.value(301) < $gameParty.members().length ? $gameParty.members()[$gameVariables.value(301)].equips().filter((equip, index) => idex > 0) : [];

としてみたんですがテストプレイ時にゲームウインドウとは別のウインドウが開き(
テストプレイ自体は固まっていない)なにやらズラーっとエラー注意文のようなものが表示されました……。

目標は①でアクターを選ぶと装備品を選択して使ったり渡したりするシーンへ、袋を選ぶと所持アイテムの一覧を選択して装備するシーンへ移行したいと考えています。

失礼、提示したスクリプトに打ちミスがありました。
idex となっている箇所を index に直してください。
また、おそらくステータス表示でもエラーが発生すると思います。
前述の通り、追加された項目は、アクターオブジェクトではありませんので、それ用の対処をしていないと、
カーソルを合わせたときに、ステータスが取得できないので、ブザー音とともに、デバッグ用のウィンドウが開き、エラーが表示されます。
ステータスウィンドウの一覧取得スクリプトを、

コード: 全て選択

$gameVariables.value(301) < $gameParty.members().length ? $gameParty.members()[$gameVariables.value(301)] : [];

に変えてみてください。
これで、まだエラーが発生する場合は、エラーが表示されているウィンドウをスクリーンショットして、添付してください。

アクターを選んだか、袋を選んだかで、異なるシーン遷移をすることに関してですが、
アクターを選択する場面と、装備品や、所持品を選ぶ場面が、同じシーンなのか、異なるシーンなのかで(例えば、アクターを選ぶシーンがパラメータの シーン1 で、装備品を選ぶシーンがパラメータの シーン2 であるというような構成なのかどうかで)回答が変わってきます。
このあたりの構成を詳しく(それぞれのシーンのウィンドウの構成なども含めて)教えてください。
けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by けいのすけ » 2022年12月04日(日) 13:50

ecf5DTTzl6h6lJj02さん、重ね重ねありがとうございます!
indexに書き換えたら上手く表示がされました!

>アクターを選択する場面と、装備品や、所持品を選ぶ場面が、同じシーンなのか、異なるシーンなのか

これは同じシーンで考えています。
別のシーンにすると前のシーンのウインドウが消えてしまうので…
(目標としては古いドラクエのように選んだコマンドでいくつものウインドウが少しづつ重なって表示されていくイメージなんです)

現状の構成はウインドウを6つ設定してあり
①アクター選択ウインドウ(+袋の選択肢)
②選択されたアクターのステータス(①で袋を選んだ際は空→出来ればデフォルトのアイテム欄表示したい)
③選択されたアクターの防具装備品の一覧(武器、アイテムも全て防具で作成してあるので作品中の実質アイテムコマンド)
④③で選んだ防具を使う、渡すなどの選択コマンド
⑤③で選んだ防具によっては使う対象アクターが必要なので対象アクターの選択ウインドウ
 (これはスイッチで表示、非表示を分けてありますがイマイチ使い方、分岐の挙動?が手探りです)
⑥⑤の対象アクターのステータスでこれも⑤と同じスイッチで表示、非表示を設定してあります。

一応スクショも添付しておきます。
アドバイス宜しくお願いします。

追記
①で袋を選んだ時に⑦番目のウインドウとして
$gameParty.armors(); // 所持防具 を考えていますが、現状自分には選択がAの時は③のウインドウ、Bの時は⑦のウインドウにフォーカスを分岐させる方法も手探り状態ではあります…。
添付ファイル
道具シーン③.png
道具シーン②.png
道具シーン①.png
ecf5DTTzl6h6lJj02
記事: 450
登録日時: 2018年12月23日(日) 13:55

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by ecf5DTTzl6h6lJj02 » 2022年12月07日(水) 00:52

こんばんは。
けいのすけ さんが書きました:ecf5DTTzl6h6lJj02さん、重ね重ねありがとうございます!
indexに書き換えたら上手く表示がされました!

>アクターを選択する場面と、装備品や、所持品を選ぶ場面が、同じシーンなのか、異なるシーンなのか

これは同じシーンで考えています。
別のシーンにすると前のシーンのウインドウが消えてしまうので…
(目標としては古いドラクエのように選んだコマンドでいくつものウインドウが少しづつ重なって表示されていくイメージなんです)

現状の構成はウインドウを6つ設定してあり
①アクター選択ウインドウ(+袋の選択肢)
②選択されたアクターのステータス(①で袋を選んだ際は空→出来ればデフォルトのアイテム欄表示したい)
③選択されたアクターの防具装備品の一覧(武器、アイテムも全て防具で作成してあるので作品中の実質アイテムコマンド)
④③で選んだ防具を使う、渡すなどの選択コマンド
⑤③で選んだ防具によっては使う対象アクターが必要なので対象アクターの選択ウインドウ
 (これはスイッチで表示、非表示を分けてありますがイマイチ使い方、分岐の挙動?が手探りです)
⑥⑤の対象アクターのステータスでこれも⑤と同じスイッチで表示、非表示を設定してあります。

一応スクショも添付しておきます。
アドバイス宜しくお願いします。

追記
①で袋を選んだ時に⑦番目のウインドウとして
$gameParty.armors(); // 所持防具 を考えていますが、現状自分には選択がAの時は③のウインドウ、Bの時は⑦のウインドウにフォーカスを分岐させる方法も手探り状態ではあります…。

こちらで、一度実際に作ってから回答するようにしているのですが、
思っていたよりも、やろうとしていることが複雑なので、
すこし、回答するのに時間がかかりそうです。
申し訳ありませんが、しばらくお待ちください。
けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by けいのすけ » 2022年12月07日(水) 20:58

かしこまりました!

アクターか別項目かの分岐ってややこしいんですね…自分には教えて貰った

$gameVariables.value(1) < $gameParty.members().length ? $gameParty.members()[$gameVariables.value(1)].equips().filter((equip, index) => index > 0) : [];

↑コレが何故武器以外の表示に変換されてるのかもよく分かりませんでした……。
(当然解決策としてこれに行きつく発想もないんですが…。)
index > 0 ←これが武器=0なのかな?と思い試しに違う数値にしてもエラーになったし…
まあそれは余談なので全然目標のシーンとは関係ないんですけど。
難しい……。
けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by けいのすけ » 2023年1月05日(木) 21:58

お疲れ様です。
自分なりに試行錯誤して何とかやりたい事が形になったので報告します。

ecf5DTTzl6h6lJj02様に教えて頂いた事を反芻しながら最初の疑問であったパーティメンバーに追加の選択肢は「ウインドウ一覧」の設定項目「一覧取得スクリプト」にパーティメンバー、「コマンドリスト」にText”馬車(
もしくは袋)”で表示させコモンイベント側でメンバー人数以上か?で分岐

$gameVariables.value(1) < $gameParty.members().length ? $gameParty.members()[$gameVariables.value(1)] : [$gameParty.armors()];

※ただ、この時メンバーをステートなどでフィルタリングしてると該当人数分分岐させる値がズレるのが厄介でした(コモンイベント内でわざわざ同じような差し引きの変数操作をして分岐させてます)
 フィルター機能がある割にコマンドリストを選択する手段がインデックス位置のみって…毎回位置変わるのに……違う方法がきっとあるんだろうな……

で、次のアクター選択項目と馬車(もしくは袋)はコモンイベントで分岐先にスイッチでウインドウを表示させて「別のシーン(アクター時はアクターの装備品、アクター以外の時はアイテム一覧など)」をそれぞれ呼び出し
SceneManager.changeWindowFocus('シーン'); ←でカーソルフォーカスさせてみました。

結局1つのシーン内で全ては完結できずコモンイベントで分岐、スイッチで表示とつぎはぎだらけのようですが…。
多分もっとスマートな方法があるのかも知れませんが何とか最低限の形にはなりました。
ecf5DTTzl6h6lJj02様ありがとうございました。

ただひとつだけ分からなかったのが「一覧取得スクリプト」で$gameParty.armors(); // 所持防具などでアイテムや防具を表示した時に個数が出てこないんですけど表示はできないんでしょうかね…?
装備品は1スロット1個だからいいんですけどアイテム一覧とか防具一覧には個数を表示したいです。
ecf5DTTzl6h6lJj02
記事: 450
登録日時: 2018年12月23日(日) 13:55

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by ecf5DTTzl6h6lJj02 » 2023年1月06日(金) 05:56

こんにちは。
回答をお待たせしてしまって、申し訳ありません。
メニュー画面のアイテムの代わりに、カスタムメニューを開いて、
アイテムを使ったり、装備したり、交換したり、ということができるサンプルプロジェクトを作成し、
サンプルプロジェクトをだせる状態まではいっているのですが、
設定内容が膨大になってしまっていて、解説用のテキストを書くのに時間がかかってしまっている状況です。
(1つのカスタムシーンでできるけど、シーン内のウィンドウの数が18個、
シーンで使うコモンイベントも20個以上という代物になってしまったもので…)
サンプルプロジェクトだけであれば、アップローダに上げるなどして、出せますが、
解説をつけるには、まだ、時間がかかってしまいます。すみません。

けいのすけ さんが書きました:ただひとつだけ分からなかったのが「一覧取得スクリプト」で$gameParty.armors(); // 所持防具などでアイテムや防具を表示した時に個数が出てこないんですけど表示はできないんでしょうかね…?
装備品は1スロット1個だからいいんですけどアイテム一覧とか防具一覧には個数を表示したいです。

こちらの件ですが、表示させることは可能です。

コード: 全て選択

$gameParty.numItems(アイテムのオブジェクト)

で、アイテムの(アクターの装備分を含まない)所持数が取得できるので、
アイテム一覧や防具一覧を表示する際の項目描画スクリプトで、

コード: 全て選択

this.drawText($gameParty.numItems(item).toString().padStart(2,' '), r.x, r.y, r.width, 'right');

を設定すれば、所持数を表示させられると思います。
ちなみに

コード: 全て選択

toString()

というメソッドは、数値を文字列に変換するメソッドで、

コード: 全て選択

padStart(文字数, 埋め文字)

というメソッドは、文字列が指定した文字数を下回っていた場合に、
指定した文字数になるように文字列の頭を埋め文字で指定した文字で埋めるというものです。
桁合わせをする際などに使われるメソッドです。
けいのすけ
記事: 43
登録日時: 2022年11月02日(水) 04:59

Re: カスタムメニュー作成プラグインで一覧のウインドウに項目を追加したい

投稿記事by けいのすけ » 2023年1月06日(金) 21:44

ecf5DTTzl6h6lJj02様、本当にありがとうございます!
教えて貰った内容を自分なりに無い頭を使って完成度を高めていきます。

>回答をお待たせしてしまって、申し訳ありません
とんでもありません!!

>設定内容が膨大になって
本当にありがとうございます!!

“MV:質問” へ戻る