【一旦完了】カスタムメニュー作成プラグインを使用して、パーティ編成を作りたい

munokura

ユーザー
カスタムメニュー作成プラグインを使用して、パーティ編成(参加メンバーと待機メンバーを入れ替える)するシーン作成を試みています。
概ねの機能を実現できたのですが、課題が残っています。

SS01.png
やりたいができていないこと

1.待機メンバーのリスト
歩行キャラの表示
現在パーティにいるメンバーの非選択化

2.待機メンバーのステータス表示
参加メンバーの表示は一部できましたが、待機メンバーの表示はできませんでした。

3.参加メンバーの能力値・装備の表示
デフォルトのステータスシーンのように表示したかったのですが、この辺りが表示できませんでした。


試行錯誤したが、上手く行かないこと

1.フィルタスクリプト

一覧取得スクリプト
$dataActors.filter(data => !!data); // データベースのアクター

でデータベースから、アクターの名前一覧を表示することができました。

しかし、このオブジェクトには画像情報等が含まれていないようで、GameActorに変換しようともしましたが、どうもGameActorが戦闘メンバー?のデータしか入っていないようで、実現できませんでした。

2.フィルタスクリプト・マッピングスクリプト・選択可能スクリプト
参加パーティを選択できないようにしたかったのですが、どうしたものか分かりませんでした。


試行錯誤しているうちに「このプラグイン単体で実現するのは、現実的ではない機能」があるのかな?と思い始めています。
フトコロ氏のプラグインに挑戦した時に「もう、独自プラグインを作ったら?」と言われましたが、このプラグインでどこまでの範疇が現実的なのかも含めて知りたく思っています。


現状のサンプル(RPGツクールMV用データ)を添付します。
改善点・非現実的な点をご指導いただければ、幸いです。
 

Attachments

  • 20210411party-bar.zip
    84.9 KB · 閲覧: 4
最後に編集:

rikudou

ユーザー
取り急ぎの投稿で失礼いたしますが、とりあえずこの状態まではできました。

1.待機メンバーのリスト
歩行キャラの表示 →できました。
現在パーティにいるメンバーの非選択化 →まだ試せていません。

2.待機メンバーのステータス表示
参加メンバーの表示は一部できましたが、待機メンバーの表示はできませんでした。 →まだ試せていません。

3.参加メンバーの能力値・装備の表示
デフォルトのステータスシーンのように表示したかったのですが、この辺りが表示できませんでした。
 →パーティメンバーの能力値は、無理やり枠内に押し込みましたが表示できました。
 →待機メンバーの方はまだできていませんが、できそうな気がします。
  (パーティメンバーの方と同じ記述では表示できないので、もう少しやってみます。)
 →装備に関しては、まだ試せていません。
  できたとしても枠内に収まらないので、レイアウト再考にちょっと時間がかかるかもです。


マッピングスクリプトについては私も使い方が分かっておらず、
プルダウンのプリセットから選ぶ & 一部書き換えでここまでは何とかできました。
選択可能スクリプトのところに「パーティにいるかどうか」を判定するスクリプトを
入れられればいいのかなと思いますが、自分ではそれがすぐに分からないため、まだ手をつけられていません。

データもいろいろいじってしまってお渡しするにはちょっと汚い状態ですので、
本日の夜にまた少し触りつつ、データをきれいにしたらこちらにアップするようにします。
(私の力が及ばずご希望通りに仕上がらないかもしれませんが、途中の段階でも一旦データを上げるようにします)

「ここをこうしたら表示できた」という説明も、今あまり時間に余裕がないため、
申し訳ないですが改めてこちらに書くようにいたします。

partytest.png
 

munokura

ユーザー
返信いただき、ありがとうございます。

今のウィンドウレイアウトだと装備まで入れるのに無理があるのはよく分かります。
ですので、添付画像のように選択中のアクターのみの表示でも良いかな?と思っています。

また、「SV戦闘キャラ」の表示方法も分かっていない(プリセットにない)ので、併せてお分かりでしたら情報をいただければ幸いです。

Party-Make-03-2.png
SS01.png
 

rikudou

ユーザー
途中経過です。
ステータスや能力値の表示は問題なさそうです。

画面のレイアウト修正および装備品の表示はまだ手をつけられてないので、少々お時間ください。
SVキャラの表示も可能かどうか、併せて挑戦してみます。

partytest2.png
 

rikudou

ユーザー
お待たせしました。

パーティメンバーと待機メンバーの顔グラ、歩行グラ、ステータス、能力値の表示
 →できました

待機メンバーリストの、パーティにいるメンバーを選択できないようにする
 →スクリプトが分からず、できませんでした。

装備品の表示
 →理想の形ではありませんが表示自体はできました。でも、ちょっと無理やりな実装になっています。

SVキャラの表示
 →見た目では出来ているように見えますが、ご要望の形には出来ていないと思います。
  SV戦闘キャラのグラフィックをバトル画面以外で表示する方法が分からなかったため、
  1コマ分だけ切り出した画像を別で用意し(picturesフォルダに入れてあります)、
  アクターのメモタグにファイル名を記載して呼び出すようにしています。
  なので、ゲームの途中で画像を変更した場合は反映されません…

ちょっとこれ以上は私には厳しそうなので(ごめんなさい >_<; )
どなたかが助言をくださればありがたいと思います。

現状のレイアウトでは、アクターのゲージの上の最大値が表示されなくなっているため、
(ウインドウの横幅を広げれば、最大値が表示されるようになります)
最大HPと最大MPの能力値も表示するようにしています。
表示は1項目ずつ描画しているので、不要な場合は削除してください。

装備スロットウインドウのありなしで、2パターン作成しました。

Scene_PartyTest1
ステータスを表示するウインドウの下に、装備品リストのウインドウを追加しています。
ステータスウインドウ内に装備品リストを表示させる方法が分からなかったので、
ウインドウを分ける形になってしまいました。
partytest3.png

Scene_PartyTest2

ひとつのウインドウ内に、装備スロットと装備品を一緒に表示させたいのはやまやまなのですが、
自分ではそれができなかったため
スロットのウインドウと装備品のウインドウをさらに分けて表示するという
ちょっと残念な方法になってしまいました……
partytest4.png


ひととおり自力でやってみて動作はしているのですが、
他のプラグイン等を併用したときにうまく表示されなかったり、
新規プロジェクトでのチェックでは問題なくとも、後々不備が出る可能性はあります。

PartyMembersウインドウのインデックスを格納する変数を追加したり、
画面のレイアウトを変えたため、ウインドウの表示切り替えおよび再描画用のスイッチや、
開閉処理のためのコモンイベントなどを追加しています。

また、シーン内でのメンバーの入れ替えは問題なく実行されているようなのですが、
シーンを閉じてマップに戻った際に、隊列の歩行グラが切り替わらないようです。
(メニューを開くとメンバーが入れ替わっているのは確認できるのですが)
ここの解決方法は私には分からなかったので、そのままにしています。
 

Attachments

  • 20210413_scene_partytest.zip
    97.6 KB · 閲覧: 7
最後に編集:

munokura

ユーザー
お手数をおかけいたしました。
内容を少しずつ確認しています。

1.パーティメンバー入れ替え後の歩行キャラの表示が変わらない問題
交代するスクリプトに下記が抜けていました。
$gamePlayer.refresh();
失礼いたしました。

2.SV戦闘キャラの表示
ピクチャで実行していますね。
改めて、コアやSV戦闘キャラを表示している他プラグインを調べてみると、
drawActorCharacter
drawActorFace
のようなメソッドがSV戦闘キャラには見当たりませんね。

ImageManager.loadSvActor(name);
あたりを流用する必要がありそうですが、これを表示するための、関数を別に作ったほうがベターになってしまいそうなので、ピクチャで解決するのは現実的かもしれません。

3.装備スロットと装備品のウィンドウが分かれてしまう。
下記のアイディアが通用しないか実験しています。

-スロット名一覧のウィンドウを幅いっぱいにする。
-装備品一覧のウィンドウの背景を透明にして、スロット名のウィンドウの上に表示する。

しかし、今の所、ウィンドウ素材を改変して重ね合わせが上手く行かず、透明化されない状態です。
ウィンドウ素材の改変が良くないのか分からないので、ここの仕様を理解する必要を感じています。
(なんとなく、完全上書きの予感はしています)
例は装備品のウィンドウ素材を、全部透過した画像に指定しています。
極論で言うと
右だけ開いているウィンドウ素材
左だけ開いているウィンドウ素材
を組み合わせて指定すれば、実現可能そうですが、スロット名と並べて装備名を表示するスクリプトが見つかるのがベターですよね。

この辺りの助言を精通している方に助言いただければ、助かります。

Window_Status.prototype.drawBlock3
あたりを直接表示できれば簡単なんでしょうけれども…

SS01.png

4.データベースの一覧から歩行キャラの表示も、この書き方に変更することで実現できる理由が分かりません。
`${}`ってどういう意味が?
グレイヴ・アクセント(`)にはどんな意味が?(シングルクォーテーションとは違うんですよね?)

項目描画スクリプト
変更前
this.drawCharacter(item.characterName(), item.characterIndex(), r.x, r.y); // キャラクター
変更後
this.drawCharacter(`${item.characterName}`, `${item.characterIndex}`, r.x + 24, r.y + 48); // キャラクター
 
最後に編集:

munokura

ユーザー
Window_Left.png
ウィンドウの左だけ開けた画像を作り、指定しましたが、下記のようになってしまいますね。
これはウィンドウの仕様だと思われるので、ウィンドウ画像を使用しないウィンドウを重ねて表示できる機能が追加されないと、なかなか難しいかも知れませんね。

SS01.png
 

rikudou

ユーザー
4.データベースの一覧から歩行キャラの表示も、この書き方に変更することで実現できる理由が分かりません。
`${}`ってどういう意味が?
 →これは私も理屈では分かっていません……
  どなたかに解説いただけると、とてもありがたいところです。

ウインドウの描画については、重ねた時に下のウインドウがマスクされてしまうのと、
ウインドウ枠の周囲(たしか4px?)が透過されるようになっているのはツクールの仕様です。
なので、ウインドウを重ねる手法は取りませんでした。
そのことを書いておけばよかったですね、余計なお手間をとらせてしまいすみません……
やはり、ステータスのウインドウに装備の表示も納められれば、理想なのですが…

もし他の方からご助言がなければ、
今回の編成シーンに限っては、画面の左側と右側で情報がうまく分かれているので、
右側のウインドウのスキンを全部透明にして、
パノラマ画像(シーンの背景画像)を設定してごまかせるとは思います。
しかし、今回のようにウインドウの位置が完全に決まっているシーン以外では応用が利かないので、
やはり、デフォルトのウインドウ表示で整えられる方法がベストだと思います。

こういう感じになります

partytest6.png

こういうとき私のような画面レイアウトにこだわるツクラーは大抵、枠を描いた背景画像を用意し、
ウインドウスキンを全部透明にして疑似的に枠を表現する力技を使います。
必要なら「パーティリスト」「メンバーリスト」等のテキストも、背景画像に含めて装飾してしまいます。
もちろん、画像編集が得意・慣れてる方以外にお勧めはできない方法なので、
デフォルトのウインドウで調整できるのが望ましいと思います。

こういう感じになります

partytest5.png

サンプル画像を用意したので、よろしければお試しください。
MVのマップエディタで、枠っぽい装飾のあるタイルを使って描画→スクショ→微調整してトリミングしただけの
超絶簡素な素材で申し訳ないですが…(なのでクレジット表記等は不要です)

back_party.pngWindow2.png
 

munokura

ユーザー
正直、解説のネタなので、できるだけ別画像を用意する必要のないような内容で収めたいなーと考えています。
今回、背景画像を用意するにしても、ウィンドウ画像も別途用意する必要があり、最低2つの画像が必要になりますよね。

そうなると、ウィンドウ枠画像を使用しないウィンドウの表示機能があると(ウィンドウスキン選択でなしの挙動の変更?)助かる人は多そうだなーという印象を受けました。

(トリアコンタンさん、ご検討ください)
(つまり、ウィンドウ内で別ウィンドウを並べて違和感がない状態にしたいってことです。)
 
最後に編集:

munokura

ユーザー
改めて、リクドウ氏に御礼申し上げます。
自分が届かなかったコードもいただき、とても助かりました。

問題は、それを理解できる状態にないので、解説できないということなのですが…:kaoblush:
 

げれげれ

ユーザー
こんにちばんわ~

主題のプラグインは利用していないので本スレッドもきちんとは読んでないのですが、
パッと見て目に留まった部分だけ。

`${}`ってどういう意味が?
グレイヴ・アクセント(`)にはどんな意味が?(シングルクォーテーションとは違うんですよね?)

 →これは私も理屈では分かっていません……
  どなたかに解説いただけると、とてもありがたいところです。

テンプレートリテラルと言います。
(mdn:テンプレートリテラル (テンプレート文字列)


超ざっくり述べると「文字列の中に変数や改行を組み込める文字列の記述法」です。
以下のように、文字列の中に変数を挿入したり、途中で改行する例があったとします。
JavaScript:
const place = '古池';
const animal = '蛙';
const sound = '水';

//従来通りの書き方
const basho = place + 'や\n' + animal + '飛び込む\n' + sound + 'の音\n';

console.log(basho);

//(出力)
//古池や
//蛙飛びこむ
//水の音
文字列と変数を+で連結しているわけです。
ごちゃごちゃして見づらいですね。

で、これをテンプレートリテラルを使って記述すると以下のようになります。
JavaScript:
const place = '古池';
const animal = '蛙';
const sound = '水';

//テンプレートリテラルだと文字列の中に変数や改行を書き込める
const basho = `${place}や
${animal}飛びこむ
${sound}の音`;

console.log(basho);

//(出力は上記と全く同じなので省略)

ずいぶん見やすいし書きやすいと思います。

[基本的なポイント]
・文字列全体をダブルクォートやシングルクォートの代わりに、`で囲う。
 (個人的にはバッククォートと読みたい)
・挿入したい変数を${}で囲う。
・改行は\nにしなくとも、普通に改行するだけで反映される。
・挿入する変数は、もちろん文字列だけでなく数字でも可能。
JavaScript:
for(let sheep = 1; sheep <4; sheep++) {
    console.log(`ヒツジが${sheep}匹`);
}

//(出力)
//ヒツジが1匹
//ヒツジが2匹
//ヒツジが3匹

べんり!
 

トリアコンタン

モデレーター
スタッフ
モデレーター
そうなると、ウィンドウ枠画像を使用しないウィンドウの表示機能があると(ウィンドウスキン選択でなしの挙動の変更?)助かる人は多そうだなーという印象を受けました。
こんにちは!
プラグインのご利用ありがとうございます。

ウィンドウ枠を消すことは可能です。項目描画スクリプトに「this.opacity = 0;」を追加すればそのウィンドウは透明になります。

ですが、マスキング処理がなくなるわけではないので以下のような表示になってしまします。
左が普通に重ねたとき、右がウィンドウ枠を消して重ねたときです。
image_20210413_233306.pngimage_20210413_233239.png

このWindowLayerの仕様を変えるのもコアスクリプト全体に影響が出てしまうので難しいです……

SVアクター表示関数を追加するのは問題なく可能です。
 

トリアコンタン

モデレーター
スタッフ
モデレーター
また、パーティにいるメンバーを選択不可にするには「選択可能スクリプト」に以下を設定します。

JavaScript:
!$gameParty.members().contains(item);
 

munokura

ユーザー
おふた方、ご助言いただき、ありがとうございます。

テンプレートリテラルと言います。
(mdn:テンプレートリテラル (テンプレート文字列)
なかなか難しいですが、とっかかりをいただき、ありがとうございます。
しっかりと学び、まとめに活かせるように頑張ります。

ウィンドウ枠を消すことは可能です。項目描画スクリプトに「this.opacity = 0;」を追加すればそのウィンドウは透明になります。

ですが、マスキング処理がなくなるわけではないので以下のような表示になってしまします。
左が普通に重ねたとき、右がウィンドウ枠を消して重ねたときです。
View attachment 10650View attachment 10651

このWindowLayerの仕様を変えるのもコアスクリプト全体に影響が出てしまうので難しいです……

SVアクター表示関数を追加するのは問題なく可能です。
ウィンドウ同士を重ねるのが難しいのは理解できました。
また、スクリプトを1つ教えていただけたことで、画像を1つ作らずに済む方法を学びました。
(不透明度を0にするわけですか…)
これも、何かのタイミングでリストに入れていただけると、助かる人が増えるかも知れませんね。

SVアクター表示は欲しい人も居ると思うので(キャラ選択で、戦闘画面の姿を見たい等)追加いただけると、喜ぶ人がいると思います。
また、パーティにいるメンバーを選択不可にするには「選択可能スクリプト」に以下を設定します。

JavaScript:
!$gameParty.members().contains(item);
文字だけ見ると、何をしているのかは分かるのですが…(汗)
徐々に、理解できるように学びたく思います。

現在の課題は
$dataActors.filter(data => !!data); // データベースのアクター
のような一覧を取得した時に、item に入る内容を確認する方法だと考えています。
(this関係もなんですが…)

これをデベロッパーツール等で、内容を確認する方法がありましたら、ご指導ください。

$dataActors のケースは、$dataActors のまとまった内容を1項目ずつitemに分けているのでしょうか?
これで分けただけで、愛だに何も処理をしないと name を表示するという仕様かな?と考えています。


追記
$dataActors.filter(data => !!data); // データベースのアクター
$dataActors
をデベロッパーツールで実行して比較したところ、0がnullだったのを削除しているということが理解できました。
this関係は、まだ確認方法が分かりませんが…
 
最後に編集:

munokura

ユーザー
また、パーティにいるメンバーを選択不可にするには「選択可能スクリプト」に以下を設定します。

JavaScript:
!$gameParty.members().contains(item);
this.opacity = 0;
なのですが、上手く動作する条件がありそうです。
その条件がよく分かりません…

上手く行かなかった例:「パーティリスト」というテキストを表示するだけのウィンドウ
ウィンドウがそのまま表示されました。
コード:
{"Id":"TitleParty","x":"0","RelativeWindowIdX":"","y":"0","RelativeWindowIdY":"","width":"288","height":"0","ColumnNumber":"1","RowNumber":"0","ItemHeight":"0","CommandList":"[\"{\\\"Text\\\":\\\"パーティリスト\\\",\\\"VisibleSwitchId\\\":\\\"0\\\",\\\"VisibleScript\\\":\\\"\\\",\\\"EnableSwitchId\\\":\\\"0\\\",\\\"IsEnableScript\\\":\\\"\\\",\\\"HelpText\\\":\\\"\\\",\\\"CancelChoice\\\":\\\"false\\\"}\"]","DataScript":"","ListWindowId":"","ListScript":"","FilterScript":"","MappingScript":"","ItemDrawScript":"[\"this.opacity = 0;\"]","IsEnableScript":"","CommonHelpText":"","DecisionEvent":"{}","CancelEvent":"{}","CursorEvent":"{}","FontSize":"0","WindowSkin":"","VisibleSwitchId":"0","ShowOpenAnimation":"true","RefreshSwitchId":"0","IndexVariableId":"0","ItemVariableId":"0","Cancelable":"true","ActorChangeable":"false","HiddenNoFocus":"false","MaskingText":""}

上手く行かなかった例2:装備品の一覧を表示したウィンドウ
コード:
{"Id":"PartyEquips","x":"434","RelativeWindowIdX":"","y":"0","RelativeWindowIdY":"PartyStatus","width":"0","height":"264","ColumnNumber":"1","RowNumber":"0","ItemHeight":"0","CommandList":"","DataScript":"","ListWindowId":"","ListScript":"$gameParty.members()[v(3)].equips();","FilterScript":"","MappingScript":"","ItemDrawScript":"[\"this.opacity = 0;\"]","IsEnableScript":"","CommonHelpText":"","DecisionEvent":"","CancelEvent":"{\"CommandId\":\"2\",\"FocusWindowId\":\"\",\"FocusWindowIndex\":\"-1\",\"Script\":\"\",\"SwitchId\":\"\"}","CursorEvent":"{}","FontSize":"0","WindowSkin":"","VisibleSwitchId":"0","ShowOpenAnimation":"true","RefreshSwitchId":"1","IndexVariableId":"0","ItemVariableId":"0","Cancelable":"true","ActorChangeable":"false","HiddenNoFocus":"false","MaskingText":""}

表示する項目まで消えてしまいました。
愚考するに、項目描画スクリプトに他のスクリプトで指定されている必要があるのかな?という印象です。
コマンドリストのみ、一覧取得スクリプトのみ等のウィンドウでは、想定外の動作になっている気がします。

もしかして、this.opacity = 255; とかやるとフェードアウトの代わりに使える?とか考えましたが、それも違ったようです…まぁ、当たり前か(笑)
フェードアウトの類は、やはり一度マップシーンに戻ってフェードアウトして、表示したい場合、元のシーンを呼び出す処理の方が無難でしょうかね…

待機メンバーのウィンドウの「選択可能スクリプト」に「!$gameParty.members().contains(item);」を入れたのですが、変化がなく選択可能でコモンイベントが実行されていました。

コード:
{"Id":"StandbyMembers","x":"0","RelativeWindowIdX":"","y":"0","RelativeWindowIdY":"TitleStandby","width":"288","height":"0","ColumnNumber":"1","RowNumber":"7","ItemHeight":"0","CommandList":"","DataScript":"","ListWindowId":"","ListScript":"$dataActors.filter(data => !!data); // データベースのアクター","FilterScript":"","MappingScript":"","ItemDrawScript":"[\"this.drawCharacter(`${item.characterName}`, `${item.characterIndex}`, r.x + 24, r.y + 48); // キャラクター\",\"this.drawText(`${item.name}`, r.x + 48, r.y, r.width - 48, 'left'); // 任意のテキスト描画(制御文字変換なし。右揃え)\"]","IsEnableScript":"!$gameParty.members().contains(item);","CommonHelpText":"","DecisionEvent":"{\"CommandId\":\"1\",\"FocusWindowId\":\"\",\"FocusWindowIndex\":\"-1\",\"Script\":\"\",\"SwitchId\":\"0\"}","CancelEvent":"{\"CommandId\":\"4\",\"FocusWindowId\":\"\",\"FocusWindowIndex\":\"-1\",\"Script\":\"\",\"SwitchId\":\"\"}","CursorEvent":"{\"CommandId\":\"0\",\"FocusWindowId\":\"\",\"FocusWindowIndex\":\"-1\",\"Script\":\"\",\"SwitchId\":\"3\"}","FontSize":"0","WindowSkin":"","VisibleSwitchId":"0","ShowOpenAnimation":"true","RefreshSwitchId":"3","IndexVariableId":"2","ItemVariableId":"0","Cancelable":"true","ActorChangeable":"false","HiddenNoFocus":"false","MaskingText":""}

何か入れ方が悪いのでしょうか?
 

chronicle

ユーザー
検証したりするとなると、プラグインでシーンとウィンドウを作成するよりは難易度が高いですね。
このプラグイン経由での動作も含めないといけなくなるので。
その時のthisはWindowクラスのインスタンスです。

変数itemに各要素が入るというのは配列メソッドなどで代入されている感じです。

コード:
//Arrayメソッドで要素の取り出し
var names = [];
var actors = $dataActors.filter(data => !!data);
actors.forEach(item => names.push(item.name));
console.log(names);

//for文の場合
var names = [];
var actors = $dataActors.filter(data => !!data);
for (let i = 0; i < actors.length; i++) {
  const item = actors[i];
  names.push(item.name);
}
console.log(names);

待機メンバーの詳細がわからないですが、データベースの要素では判定できません。
それと待機メンバーが、戦闘メンバーとそれ以外なのか、パーティーに加わっていないという意味なのかでも違ってきます。
$gameParty.members()に要素があるかどうかは同じ参照になる
$gameActors.actor(x)
で判定しないといけません。
 
最後に編集:

トリアコンタン

モデレーター
スタッフ
モデレーター
this.opacity = 0;
なのですが、上手く動作する条件がありそうです。
その条件がよく分かりません…
『項目描画スクリプト』には以下の仕様があります。
  • 『コマンドリスト』に何かを設定した場合は、データスクリプト配下の項目はすべて無視されます。
  • 『項目描画スクリプト』を空にした場合は、項目の内容を単純描画する代替処理が走ります。(つまり『項目描画スクリプト』を設定した場合、代替処理が走らなくなります)
『this.opacity = 0;』のスクリプトはあくまで特定の局面でのみ使える裏技です。なのでプリセットには追加せず、やるとしたら正式にウィンドウ枠の透明化機能を実装します。

ただ、現状MZへの移植リクエストも溜まっており、対応時期についてはお約束できない状況です。
 

munokura

ユーザー
現状では、リクドウ氏から頂いたサンプルを再検証して、解説できる範囲でまとめるのが現実的かと思いました。
やることは…
  • テンプレートリテラルの学習
  • 関係するスイッチ・変数の必要性を再確認、整理
  • 背景についての言及(触りだけにして簡単に作る方法は別記事ですね)
という感じです。

ここくらいまで解説がまとまると、使用できる人が増えると思うのですが、一気にここまで上がると「既にプラグインを作れる人」にしか使えないんじゃないかと感じています。

少し頑張ると使えるくらいのレベルに持っていきたいです。

皆さん、ありがとうございました。


追記
まとめ、その3としては、追加要素が多すぎるかな…と考え始めています。
その4か5くらいかな…

その3は要素として、下記くらいが妥当かと考えています。
  • コマンド選択で別ウィンドウが連動して変化する。
  • コマンド選択を2つ以上にして、つなぐ。
有料レベルアップ場(訓練場)みたいな感じなら、シンプルな構成(デフォルトプリセット)で作れるかも?
能力値の表示は、結構ハードル高いですよね。
パーティ編成でも、能力値と装備を表示しなければ…悩ましい…
 
最後に編集:

chronicle

ユーザー
一旦完了となっていますが、rikudouさんのサンプルを試してみました。

プラグインパラメーターの設定内容と変数やコモンイベントを組み合わせて処理を追えないと難しい感じですね。(普通に数時間~半日かかりました)
あと純粋にJavaScript入門くらいの知識がないと、プリセットをベースにしていてもわかりにくそうです。
プラグイン制作と比べると断然簡単で楽です。


Scene_PartyTest1で実装しましたが、装備表示は問題なく可能で、ウィンドウを分けると装備タイプが表示行数以上でもカーソル移動でさせられます。
装備タイプ数が変動し未装備の場合対処が必要になってきます。

検証用に両パターン実装し、装備ウィンドウ経由で推移するようにして(選択した装備に意味はなし)、ちらつきやウィンドウサイズなどのUIも調整済みです。
他にも何箇所か変更しています。

party2.pngparty3.png

現在の実装上でどうにもならないのはデータベースアクターを利用する上での制限関連です。
イベントコマンドでアクターの情報を変更した場合と、除外したいアクターやストーリー進行でパーティー加入制限や非表示等です。

指定したアクターID一覧から待機パーティを作成するといろいろと楽です。


追記:
コメント追加したパターンにファイルを差し替えました。

項目描画スクリプトで装備関連の取得スクリプト
コード:
//装備タイプ名の取得
$dataSystem.equipTypes[item.equipSlots()[n]]
//装備品の取得
item.equips()[n]

//nは装備スロット番号で0から指定
//装備タイプ数が変動したり未装備の場合の対処が必要

最大6スロットまでの一括した項目描画スクリプト
コード:
//装備タイプ名
item.equipSlots().forEach((id, i) => i < 6 && id && this.drawText($dataSystem.equipTypes[id], r.x, r.y + (i * 36), 138));//装備タイプ名表示
//装備アイコン+名前
item.equips().forEach((equip, i) =>  i < 6 && equip && this.drawItemName(equip, r.x + 138, r.y + (i * 36)));//装備アイコン+名前表示

応用になりますが、複数の項目一覧も扱えます。
コード:
[[1, 'a'], [2, 'b'], [3, 'c']]//一覧取得スクリプトの配列形式

//描画スクリプトでそれぞれの要素を取得
item[0];//1
item[1];//a
 

Attachments

  • plugins.zip
    4.1 KB · 閲覧: 4
最後に編集:
トップ