【MV】スクリプトコマンドからプラグインコマンドを呼び出す方法

これはツクールMVの話です。
プラグインコマンドをスクリプトコマンドから実行したいときってないですか?

え?
ない?

僕もぶっちゃけないのですが、何かの拍子に実行したくなるかもしれません。
というわけで、今日は僕のお勉強に付き合っていただきましょう!

注*プラグインコマンドとスクリプトコマンドを混同しないように注意してください。

プラグインコマンドは内部で何をやっているのか

rpg_objects.jsの1万500行目あたりに

// Plugin Command
Game_Interpreter.prototype.command356 = function() {
var args = this._params[0].split(" ");
var command = args.shift();
this.pluginCommand(command, args);
return true;
};

こんなのがあります。
プラグインコマンドを実行すると、通常はこのメソッドが呼ばれます

注*でもこれが呼ばれる前に呼ばれるメソッドがあるような気がします。うん、多分あります。でもここで大事なのはコイツなので略。

なーにしてんだ一体?
ということですが、

this._params[0]

これがプラグインコマンドで入力されたコマンドの文字列です。
一行目で、半角スペースで分割し、args変数に代入しています。
このとき、split()は配列を戻り値として返すので、argsの中身は配列になっています。

で、次にcommand変数にargs.shift()を代入していますね。
shift()は、「配列から最初の要素を取り除き、その要素を返します。このメソッドは配列の長さを変えます」。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/shift

要はプラグインコマンドの一番最初の命令(半角スペースで区切るまで)をcommand変数に代入して、ついでにargs変数から取り除いていることになります。

this.pluginCommand(command, args);

あとはこれですね。
このpluginCommand()は通常、プラグイン側で色々と設定して使われます。

一般的なプラグインでは、

最初にプラグイン独自のコマンド名を宣言
次に個別の命令を必要な数だけ命令

します。

僕が最近公開した「あらすじプラグイン」だと、

「POS writeLine これがあらすじに追加される文字」

とプラグインコマンドから命令すると、

command変数→’POS’
args配列→’writeLine’, ‘これがあらすじに追加される文字’

が格納されることになります。

これらのデータを使って、ホニャララと色々実行するわけです。

スクリプトコマンドからプラグインコマンドを呼び出す方法

プラグインコマンドのthisはGame_Interpreterのインスタンスのことです(たぶん)。

なので、スクリプトコマンドから

this.pluginCommand(command, args);

を実行すると、プラグインコマンドを実行したのと同じ結果が得られます
他の方もそう書いていました。
僕もこれは間違っていないと思います。

が、ここで注意したいのが、
commandはふつーの文字列で大丈夫だけれど、argsは配列を指定しなければならない
ことです。

つまり

this.pluginCommand(POS, writeLine, 新しい文字です);

これじゃダメです。
まず、command変数(POSの部分)も文字列になっていません。

this.pluginCommand('POS', 'writeLine', '新しい文字です');

じゃあこれでいいか?
と言えば、これもNOです。

通常、プラグイン製作者は仮引数argsに配列が渡ってくることを期待しています(プラグインコマンドはcommand356()を経由して実行されることを想定しているため)。
なので、こう書きます。

this.pluginCommand('POS', ['writeLine', '新しい文字です']);

つまり第一引数には通常の文字列を、第二引数には配列を指定します。
配列の中で、指定したいコマンドを「文字列として」追加していく感じです(配列ってなんぞ?という方はググってください!)。

これで動きます、たぶん、きっと。
ほなまた。

フォローする