コモンイベントに引数を渡したい

kyoro
記事: 9
登録日時: 2022年10月04日(火) 23:08

コモンイベントに引数を渡したい

投稿記事by kyoro » 2022年10月04日(火) 23:28

C言語の方がよくやっているので、C言語でやりたい事を書きます。
ツクールMVにおけるコモンイベントって、引数なしのvoid関数というイメージで捉えています。

コード: 全て選択

void CommonEvent1();

(↑こんな感じに)

そんなコモンイベントに、疑似的に引数を与えることを考えます。
コモンイベント自身には引数を渡せないので、コモンイベントを呼び出す前に特定の変数の値を変更しておきます(今回は変数61,62を使用)。
ツクールMV上で使うには
①「変数61の変更」
②「変数62の変更」
③「コモンイベント1の呼び出し」
の様に扱う必要があり、それをC言語で表すと下記のようになると思います。

コード: 全て選択

void CommonEvent1(){
    ...
    func1(ary[61]);   //変数61を使った処理
    func2(ary[62]);   //変数62を使った処理
    ...
}

int main(){
    ...
    ary[61]=10;
    ary[62]=20;
    CommonEvent1();
    ...
}


ですが、これだと呼び出すときにいちいち①~③の3つもコピペしなくてはならず、ミスも起きやすい。従って、スクリプト一行でコモンイベント1に変数61,62を渡す関数を作りたいのです。

C言語で書くと以下のようなイメージです。

コード: 全て選択

void myCommonEvent1(a, b){
    ...
    ary[61] = a;
    ary[62] = b;
   
    func1(ary[61]);   //変数61を使った処理
    func2(ary[62]);   //変数62を使った処理
    ...
}

int main(){
    ...
   
       myCommonEvent(10,20);   //目標!!
       
    ...
}


javascriptは殆ど分からないので、サイトを色々と漁ってみて、とりあえず以下の様に作ってみましたが、動作しませんでした(コモンイベント18で変数61,62を使います)。

コード: 全て選択

Game_CommonEvent.prototype.gazou_ue = function(actNum,actID){
   $gameVariables.setValue(61)=actNum
    $gameVariables.setValue(62)=actID
    this.setupChild($dataCommonEvents[18].list, this._eventId)
};


解決策・ヒントなど教えてくださる方がいらっしゃいましたら、よろしくお願いいたします。

アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: コモンイベントに引数を渡したい

投稿記事by Plasma Dark » 2022年10月05日(水) 12:05

C言語の方がよくやっているので


プログラミング言語をひとつ学習したのであれば、同様の方法をJSに当てはめるだけである程度は習得できます。
とりあえず見よう見まねで書いて動かしても良いですが、Cがそれなりに読めるのであればJSも(無論、必要な情報をググったりしながら)なんとなく読めるんじゃあないかと思います。

スクリプト一行でコモンイベント1に変数61,62を渡す関数を作りたい


イベントコマンド1つで、指定した2つの値を変数61, 62にセットした上で、コモンイベント1を呼び出したい、ということでしょうか。

プラグインコマンドを作ってみることをオススメします。
今回の例であれば、このように書けます。
https://gist.github.com/elleonard/3d8a2 ... 6fa6ddd457

ツクールMVのイベントコマンド実行は Game_Interpreter クラスで処理されています。
イベントコマンドによるコモンイベント呼び出しも同様で、 Game_Interpreter.prototype.command117 で処理が定義されています。
上記プラグインコマンドの例では reserveCommonEvent を使っていますが、やっていることはあんまり変わりません。
(厳密な処理内容まで気になるのであれば、 setupReservedCommonEvent の処理フローを追ってみてください)
kyoro
記事: 9
登録日時: 2022年10月04日(火) 23:08

Re: コモンイベントに引数を渡したい

投稿記事by kyoro » 2022年10月06日(木) 00:43

ご回答のみならず、プラグインまでご提供頂きありがとうございます。
目的の動作はその通りでございますが、ツクール上で「callCommon1WithVariable6162 1 2」と呼び出してみても動作しないようです。returnなどが原因かと思い消してみましたが、動きません。
同様の操作を「変数61の変更」「変数62の変更」「コモンイベント呼び出し」で行ったところ問題なく動作しています。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: コモンイベントに引数を渡したい

投稿記事by Plasma Dark » 2022年10月06日(木) 12:01

ツクール上で「callCommon1WithVariable6162 1 2」と呼び出してみても動作しないようです。


これだけではどう試されているのかわかりません。
ツクールMVのイベントエディタから、呼び出しを行っているイベントについて、イベントコマンドを選択して右クリックしてから「テキストとしてコピー」して貼り付けると齟齬なく伝わるかと思います。
kyoro
記事: 9
登録日時: 2022年10月04日(火) 23:08

Re: コモンイベントに引数を渡したい

投稿記事by kyoro » 2022年10月06日(木) 21:52

分かりづらくて申し訳ありません。
新規→プラグインコマンド→callCommon1WithVariable6162 1 2と入力しています
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: コモンイベントに引数を渡したい

投稿記事by Plasma Dark » 2022年10月06日(木) 22:09

プラグインはONにされているでしょうか。
プラグイン管理の画面はどのような表示になっていますか。
kyoro
記事: 9
登録日時: 2022年10月04日(火) 23:08

Re: コモンイベントに引数を渡したい

投稿記事by kyoro » 2022年10月08日(土) 00:30

はい、pluguinCommandSampleをONにしています。
呼び出しは、「プラグインコマンド:callCommon1WithVariable6162 2 5」としています。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: コモンイベントに引数を渡したい

投稿記事by Plasma Dark » 2022年10月08日(土) 03:01

こちらでは正しく動いているので、何かが間違っていそうです。

テストプレイを起動した状態で、F8キーを押して Console タブを開き、以下のことを確認してみてください。

1. 赤い文字でエラーが表示されていないかどうか。
プラグインの導入方法が正しくない場合、ここでエラーが出ている可能性があります。

2. Utils.RPGMAKER_VERSION と入力してEnterを押す。 "1.6.x" と表示されるかどうか。(xはおそらく1になっています)
ツクールMVのコアスクリプトのバージョンが最新でない場合、ここの表示が違う可能性があります。最新にしてください。

3. $plugins.find(p => p.name === 'pluguinCommandSample') と入力してEnterを押す。 ロードしているプラグインの情報が表示されているかどうか。
プラグインの名前が pluginCommandSample.js であり、正しくロードできている場合はプラグインの情報が表示されます。
右三角をクリックして情報を展開すると、nameやstatusなどが表示されます。statusはtrueになっていることを確認してください。statusがfalseの場合、プラグイン管理画面で対象プラグインがOFFになっています。

ここで undefined と表示される場合、プラグイン管理画面に対象プラグインが存在しません。
kyoro
記事: 9
登録日時: 2022年10月04日(火) 23:08

Re: コモンイベントに引数を渡したい

投稿記事by kyoro » 2022年10月12日(水) 17:29

遅くなりすみません。

ご丁寧にありがとうございます。Darkさんの上げられた3つに関しては問題ありませんでした。
自分で色々と行ってみたところ、コモンイベントの呼び出しが行われていることは確認できましたが、呼び出しが実行時ではなく、イベントページ内の処理が終わってからとなっているようです。
即座にコモンイベントを実行することは可能でしょうか?
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: コモンイベントに引数を渡したい

投稿記事by Plasma Dark » 2022年10月12日(水) 23:02

コモンイベントの呼び出しが行われていることは確認できましたが、呼び出しが実行時ではなく、イベントページ内の処理が終わってからとなっているようです。


大変失礼いたしました。イベントの終了を待ってからコモンイベントを呼び出すような記述になっておりました。
修正しましたので、こちらでお試しください。
https://gist.github.com/elleonard/3d8a2 ... 6fa6ddd457

“MV:質問” へ戻る