現在実行されているコモンイベントの取得

返信する
ミスター
記事: 5
登録日時: 2016年5月05日(木) 17:45

現在実行されているコモンイベントの取得

投稿記事 by ミスター »

タイトル通りです
Scene_xx内で現在実行されてるコモンイベントのIDを取得したいのですが
方法がわからず質問させていただきました
名無し蛙
記事: 352
登録日時: 2015年11月23日(月) 02:46

Re: 現在実行されているコモンイベントの取得

投稿記事 by 名無し蛙 »

どうもこんにちは。

イベントは
「マップイベント」「バトルイベント」「コモンイベント」「マップ並列イベント」「コモン並列イベント」
の五種類が有りそれぞれ処理のされ方は異なります。
コモンイベントもイベントコマンドで呼び出す場合と「使用効果」で呼び出す場合とで少しプロセスが違います。
詳しい説明を始めると本意から大きくずれると思うのでコモンイベントに関するIDの取得方法だけ書くと

①コモンイベント呼び出し

コード: 全て選択

var interpreter = $gameParty.inBattle() ? $gameTroop._interpreter : $gameMap._interpreter;
while (interpreter._childInterpreter !== null) interpreter = interpreter._childInterpreter;
console.log(interpreter._eventId); // 現在起動中のコモンイベント表示
②コモン並列イベント

コード: 全て選択

// 現在起動中の並列コモンイベントIDを配列にして取得
var array = $gameMap._commonEvents.filter(function (event) {
    return event.isActive();
}).map(function (event) {
    return event.event().id;
});
console.log(array); // 現在起動中の並列コモンイベント表示
この二通りになるんじゃないでしょうか。
コンソール表示ではなく変数に納める場合は最後の行を
$gameVariables.setValue(1, interpreter._eventId); // 変数1に格納
に変更してください。コモン並列イベントの方は例え一つしかなくても配列化しているので
$gameVariables.setValue(1, array[0]); // 最初の実行中並列コモンイベントIDを変数1に格納
といった具合ですかね。
並列イベントの中でのコモンイベント呼び出しとかはかなりワケが分からない事になるのでとりあえず割愛します。

追記:
ごめんなさい間違いました。
後者はともかく前者はおかしいです。起動したマップイベントIDが出るはずです。
「コモンイベントIDは記録されない為分からない」が正解だと思います。が、それだと芸がないですね。
一応簡単な記録用プラグインを置いておきます。もし実用するなら適当に変数番号を弄ってください。
参照する場所(自作プラグインで使用orコモンイベント内で使用等)や求める情報によって書き方が色々と異なってくるので
意にそぐわないようでしたらもう少し情報を限定してもらえると助かります。
ちなみにこれはイベントコマンド「コモンイベント」を通した時の書き方で使用効果「コモンイベント」は関係がありません。

コード: 全て選択

(function(){
// Common Event
var Game_Interpreter_command117 = Game_Interpreter.prototype.command117;
Game_Interpreter.prototype.command117 = function() {
    $gameVariables.setValue(1, this._params[0]); // 変数番号1番にコモンイベントIDを記録する。
    return Game_Interpreter_command117.call(this);
};
}());
最後に編集したユーザー 名無し蛙 [ 2016年5月23日(月) 19:38 ], 累計 1 回
ミスター
記事: 5
登録日時: 2016年5月05日(木) 17:45

Re: 現在実行されているコモンイベントの取得

投稿記事 by ミスター »

$gameTemp.reserveCommonEvent(n)で呼び出していたのでアドバイスの通りワケが解らない事になってました
$gameMap._interpreter._listで実行中のイベントの中身を調べる事は出来たのですが、
どうしてもコモンのIDやコモンイベントの名前を取得する事はできず。。。

コモンイベントを記録するしかなさそうなのでそっちで試してみます
名無し蛙
記事: 352
登録日時: 2015年11月23日(月) 02:46

Re: 現在実行されているコモンイベントの取得

投稿記事 by 名無し蛙 »

あっちょうど被りましたか。
色々弄って確認中で後者はやっぱり合ってましたがそれはどうでもいいですね。

$gameTempを利用する場合はデフォルトだと「使用効果:コモンイベント」の方法に該当します。
それならフックするポイントはイベントコマンドではなくコモンイベントIDを予約する時じゃないと意味がありませんね。

コード: 全て選択

(function(){
var Game_Temp_reserveCommonEvent = Game_Temp.prototype.reserveCommonEvent;
Game_Temp.prototype.reserveCommonEvent = function(commonEventId) {
    $gameVariables.setValue(1, commonEventId); // 変数番号1番にコモンイベントIDを記録する。
    Game_Temp_reserveCommonEvent.call(this, commonEventId);
};
}());
スクリプトの知識に明るい方でしたらわざわざ汎用変数に入れる必要はないと思いますけど
実行中のイベントIDを調べるにはやっぱり予約時にどこかにIDを記録するしかない、と思います。
IDさえ分かれば$dataCommonEventsから色々情報を引き出す事が出来ます。

コード: 全て選択

var commonEventId = $gameVariables.value(1); // 格納したコモンイベントIDを戻す
var commonEventName = $dataCommonEvents[commonEventId].name; // 名前の取得
ミスター
記事: 5
登録日時: 2016年5月05日(木) 17:45

Re: 現在実行されているコモンイベントの取得

投稿記事 by ミスター »

ありがとうございます
やはりどこにもlist以外のコモンイベントの情報が記録されていないみたいなので
$gameTemp.reserveCommonEventでthis._commonIdに入るのを利用するしかないみたいですね
これでやってみようと思います
返信する

“MV:質問”に戻る