事前のお知らせ

MZ攻略本レベル4 プラグイン応用 攻略本レベル4 プラグイン応用

カスタムメニュー作成プラグイン入門その3:RPGツクールMZ・MV

トリアコンタン氏作の「カスタムメニュー作成プラグイン」はRPGツクールMZとMV用の両方があります。
使用方法は全く同じなので、以下の画面はMVを使用しますが、MZでも全く同じです。

▼作者による解説
triacontane.blogspot.com/2020/03/blog-post.html

一連の記事

下記の記事では、デフォルトに設定されていたシーンを流用して、転職シーンを実働させました。

カスタムメニュー作成プラグイン入門その1

上記は、最低限の変更で実働させる内容でした。
(上記サンプルでは2シーンを使用しており、上限が20であり、慣れると節約したくなりますので)
今回は、簡易な転職シーンを作成します。

目次

サンプルプロジェクト

zipを解凍したものを新規プロジェクトに上書きして使ってください。

MZ用ZIPダウンロード

MV用ZIPダウンロード

プラグイン本体

RPGツクールMZ用

▼カスタムメニュー作成(トリアコンタン様作) - SceneCustomMenu.js
plugin-mz.fungamemake.com/archives/2597

RPGツクールMV用

▼カスタムメニュー作成(トリアコンタン様作) - SceneCustomMenu.js
plugin.fungamemake.com/archives/23762

今回の要素

  • カーソル位置に合わせて変動するウィンドウの指定
  • 複数の選択肢を往来する処理(決定イベント・キャンセルイベント)
  • 変数(インデックス格納変数・選択項目格納変数)に代入される処理の違い

完成画面

シーン作成

シーン識別子

ClassChange

ヘルプ行数

1

ウィンドウ作成

入門その2-1のように、ウィンドウの作成(大きさと位置関係の設定)を済ませます。
fungamemake.com/archives/13213

以下のウィンドウの横幅は300に統一します。

ラベル的ウィンドウ1(パーティメンバー)

ウィンドウ識別子

PatyLabel

コマンドリスト

項目内容に「パーティメンバー」のみ入れます。

アクター選択ウィンドウ

ウィンドウ識別子

MemberList

相対Y座標ウィンドウ

PatyLabel
(これで上記のラベルの直下に位置が指定されます)

行数

4

一覧取得スクリプト

プリセットから書きを選びます。
$gameParty.members(); // パーティメンバー

共通ヘルプテキスト

転職するアクターを選択してください。

ラベル的ウィンドウ2(職業)

ウィンドウ識別子

ClassLabel

相対Y座標ウィンドウ

MemberList

コマンドリスト

項目内容に「職業」のみ入れます。

職業選択ウィンドウ

ウィンドウ識別子

ClassList

相対Y座標ウィンドウ

ClassLabel

行数

4

一覧取得スクリプト

プリセットから書きを選びます。
$dataClasses.filter(data => !!data); // データベースの職業

共通ヘルプテキスト

職業を選んでください。

ここまででテスト

下記のような表示になっていると思います。
ここから順に機能を追加していきます。

機能実装1

最初のウィンドウの指定

シーン編集の最初のウィンドウにある「初期イベント」を指定します。
これが無指定の場合、ウィンドウ一覧の一番上のウィンドウがアクティブになります。

初期イベント>ウィンドウ識別子

MemberList

これで、最初にアクター選択肢のウィンドウがアクティブになります。

カーソル位置に合わせて変動するウィンドウの指定

新しいウィンドウを追加します。

ウィンドウ識別子

ActorStasus

相対X座標ウィンドウ

MemberList

高さ

552

データスクリプト>一覧ウィンドウ識別子

MemberList

ここで、MemberListのウィンドウと連動して表示変更する指定をしています。

データスクリプト>項目描画スクリプト

ここで、表示内容を複数指定できます。
今回はプリセットから下記を選択します。

this.drawActorSimpleStatus(item, r.x, r.y, r.width); // アクターのステータス

下記のように、アクター選択で連動してウィンドウ内容が変化します。

これに、顔画像、歩行キャラを追加します。

プリセットから下記を追加します。

this.drawActorFace(item, r.x, r.y); // アクターフェイス
this.drawActorCharacter(item, r.x + 24, r.y + 48); // アクターキャラクター

描画スクリプト一覧の数字が小さい方が下側に表示されます。
この順は、リストをドラッグ・アンド・ドロップで移動できます。
表示座標は「アクターキャラクター」のプリセットのように r.x(r.y)の後ろに加算・減算を書き込むことで調整できます。

機能実装2

MemberListウィンドウ(アクター選択)の機能

決定イベント>コモンイベント

今回は1を指定します。
※決定イベントで、コモンイベントとスクリプトの両方を指定すると、スクリプトが優先されコモンイベントは実行されません。

決定イベント>ウィンドウ識別子

ClassList

これによって、アクター選択を決定した時に ClassList ウィンドウにカーソルが移動します。

SS

キャンセルイベント>スクリプト

プリセットから下記を選びます。
SceneManager.goto(Scene_Map); // マップ画面に遷移

選択項目格納変数

この例では変数ID1を選択します。

ClassListウィンドウ(職業選択)の機能

決定イベント>ウィンドウ識別子

ClassList

これによって、職業選択を決定した時に ClassList ウィンドウにカーソルが留まります。
※MemberListにするとカーソルが移動しますが、カーソルが残ってしまう不自然さを避けるためです。
実験して体験してください。

キャンセルイベント>ウィンドウ識別子

MemberList

アクター選択ウィンドウに戻ります。

インデックス格納変数

今回の例では変数ID2を指定します。

変数に代入された内容の確認

今回、アクターと職業では変数の格納方法が異なります。

  • アクター:選択項目格納変数
  • 職業:インデックス格納変数

選択項目格納変数

選択項目格納変数のヘルプは下記のとおりです。

選択中の項目オブジェクトが常に格納される変数です。数値以外のオブジェクトが格納されるので取り扱いに注意してください。

ここで「オブジェクト」とは何か?を詳細に説明するのは避けます。(説明できません)
こんなデータが入っているという確認方法と、利用する方法だけを提示します。

下記記事と被る部分が多いですが、実例として挙げておきます。

ツクール内のデータの取得(コンソールの使い方)と初歩的なスクリプトの組み方(プラグインコマンドの中身)

デベロッパーツール起動

テストプレイを起動し、F8(もしくはF12)キーを押すとデベロッパーツールが起動します。

この時に「Console」タブが選択されていない場合、クリックして選択してください。

テストプレイで、アクターを選択して変数に代入させます。
職業を選んだり、キャンセルしたりせずに、そのままデベロッパーツールのウィンドウに移ってください。

左にある 青い> の右側をクリックし、下記を入力しエンターを押します。

$gameVariables.value(1)

下記のように、代入されているデータが表示されます。

Game_Actor とある左の▶をクリックすると、内容が開きます。

今回、必要なのはアクターのIDです。
_actorId:1
となっていますね。

デベロッパーツールの一番下に行き、下記を入力しエンターを押します。

$gameVariables.value(1)._actorId

1 が返ってきます。
このようにして、オブジェクトの中身から、必要なデータを引き出します。

ただ、今回は下記のように書くべきというプログラマの方々が多いので、そのようにしておきます。

$gameVariables.value(1).actorId()

理由は上記のプラグインの作り方の記事を読んでください。

インデックス格納変数

インデックスは表示された順に0から始まり1ずつ増えていきます。
データベースやコマンドリストで一覧を作った場合に便利です。

今回は職業のデータベースから一覧を作成しているので、取得された変数の値に1加算することで、職業IDと合わせます。

コモンイベント

今回は、アクターを転職させるので職業の変更をスクリプトで行います。

参考
rpgmaker-script-wiki.xyz/job_mv.php
$gameActors.actor(アクターID).changeClass(職業ID, レベルの保持 true/false)

今回はコモンイベントに下記のスクリプトを入れます。

◆スクリプト:const selectActorId = $gameVariables.value(1).actorId();
:     :const selectClassId = $gameVariables.value(2) + 1;
:     :$gameActors.actor(selectActorId).changeClass(selectClassId, true);

 

const selectActorId = $gameVariables.value(1).actorId();
const selectClassId = $gameVariables.value(2) + 1;
$gameActors.actor(selectActorId).changeClass(selectClassId, true);

RPGツクールMVで転職機能を使う場合の注意

RPGツクールMVでは転職時の仕様が不自然で、下記のプラグイン導入をお勧めします。
※上記サンプルプロジェクトには未導入です。

▼ 職業の変更によるスキル習得(トリアコンタン様作)
plugin.fungamemake.com/archives/23667
イベントコマンド『職業の変更』を行ったとき、変更先の職業が習得できるスキルを自働で習得します。

総括

シンプルに解説できるのは、この辺りが限界だと感じています。
これ以上は、JavaScriptの知識がかなり必要になり、他の方の作成されたサンプルや記事を参考に進んで行くことをお勧めします。

これらの記事が、カスタムメニュー作成プラグインを利用する取っ掛かりになれば幸いです。

最後に、参考になりそうなリンクをリストアップしておきます。

スポンサードリンク

スポンサードリンク

-MZ攻略本レベル4 プラグイン応用, 攻略本レベル4 プラグイン応用

Copyright© RPGツクールMZ・MV初心者的備忘録 - ムノクラのメモ帳 , 2021 All Rights Reserved.