【解決済み】フォロワーの下にあるイベントを取得する方法

累積比率パレートマン
記事: 33
登録日時: 2022年1月12日(水) 01:12

【解決済み】フォロワーの下にあるイベントを取得する方法

投稿記事by 累積比率パレートマン » 2022年9月07日(水) 12:01

エンジニアの皆々様


お疲れ様です。

隊列歩行時、フォロワーの下にイベントが存在するか

またそのイベントのIDと名前を取得する方法はありますでしょうか?

プレイヤーの下にあるイベントは取得できるのですが、

フォロワーとは扱いが別物なので、まるで見当がつきません。


DarkPlasma様のDarkPlasma_EventTriggerTouchFollower.jsを導入して

フォロワーにイベントとの当たり判定をつけていますが

このプラグインに何らかのヒントが隠れていると思い、連日読み解いているものの

一向に解決策が見つかりません。

https://raw.githubusercontent.com/elleo ... ollower.js


システムの根幹にかかわるため、どうしても知りたいことでして、

もしも解決策にお心当たりがある有識者の方がおりましたら

ご助言を頂戴できますと幸いに存じます。

何卒よろしくお願い申し上げます。
最後に編集したユーザー 累積比率パレートマン on 2022年9月07日(水) 23:14 [ 編集 1 回目 ]

名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: フォロワーの下にあるイベントを取得する方法

投稿記事by 名無し蛙 » 2022年9月07日(水) 12:47

コード: 全て選択

// フォロワー0番目(プレイヤ含む隊列の2番目)の取得
const c = $gamePlayer.followers().follower(0);
// フォロワーのxy座標から該当位置のイベント配列を取得
const events = $gameMap.tileEventsXy(c.x, c.y);
// イベント配列長が1以上の場合
if (0 < events.length) {
    // 先頭イベントの名前のコンソール出力
    console.log(events[0].event().name);
    // 先頭イベントのIDのコンソール出力
    console.log(events[0].eventId());
}

どういう用途に加工するのか知らないですけどこんな感じですか
累積比率パレートマン
記事: 33
登録日時: 2022年1月12日(水) 01:12

Re: フォロワーの下にあるイベントを取得する方法

投稿記事by 累積比率パレートマン » 2022年9月07日(水) 22:27

名無し蛙 様

早速ご回答くださり、誠にありがとうございます。

いただいた貴重なコードを、早速試してみました。

コード: 全て選択

console.log($gamePlayer.followers().follower(0));
console.log($gamePlayer.followers().follower(1));
console.log($gamePlayer.followers().follower(2));


これは取得できました。

しかし、

コード: 全て選択

if (0 < events.length) {
    // 先頭イベントの名前のコンソール出力
    console.log(events[0].event().name);
    // 先頭イベントのIDのコンソール出力
    console.log(events[0].eventId());
}


これは、フォロワー1人目の足元にイベントがあるにもかかわらず、

if文を通らなかったため、console.log(events[0]);のみ走らせてみたところ

undefinedとなりました。

const events = $gameMap.tileEventsXy(c.x, c.y); このコードのxとyを

イベントを設置したマップ座標の定数を指定しても、なぜかundefinedでした。


私が、名無し蛙様からいただいたコードの意味をはき違えている可能性が高いですので、

確認させていただきたいのですが

このコードは、実行したときに、フォロワー1人目の下にイベントがあった場合

そのイベントのIDと名前を取得するコードということで間違いないでしょうか?

せっかくいただいたコードなのに、私の誤解のせいでうまく動かないというのは申し訳ないことですので、

何か解釈が間違っておりましたらご指摘ください。


用途につきましては、2つありまして、まず扉イベントです。

フォロワーの最後尾のキャラが扉を通過し終わったかを判定させるのに使いたいと思っています。

2つ目は、トリアコンタン様の動的イベント生成プラグインで生成したイベントの上に乗っているとき、

その座標の上にいるフォロワーにイベントを実行させたいという意図があります。

引き続きご回答のほど、何卒、宜しくお願い申し上げます。
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: フォロワーの下にあるイベントを取得する方法

投稿記事by 名無し蛙 » 2022年9月07日(水) 23:11

一応確認しておきたいんですけど「フォロワーの下」とは
(フォロワーと同じ位置にいるプライオリティが)下に設定されている、イベントという意味ですか?
自分はそのつもりで書いていたんですけど
もしも(位置座標が)1マス下のイベントという意味ならY座標に+1する必要があります。

コード: 全て選択

// 対象フォロワーのxy座標から該当位置の1マス下のイベント配列を取得
const events = $gameMap.tileEventsXy(c.x, c.y + 1);
累積比率パレートマン
記事: 33
登録日時: 2022年1月12日(水) 01:12

Re: フォロワーの下にあるイベントを取得する方法

投稿記事by 累積比率パレートマン » 2022年9月07日(水) 23:13

名無し蛙 様

いただいたコードのおかげあって

考え方が分かりましたので

なんとか自力で解決できました。

以下のように、eventIdXyを使うと取得できました。

コード: 全て選択

const f1x = $gamePlayer.followers().follower(0).x;
const f1y = $gamePlayer.followers().follower(0).y;
console.log($gameMap.eventIdXy(f1x, f1y));
console.log($gameMap._events[$gameMap.eventIdXy(f1x, f1y)].event().name);


tileEventsXyは、リファレンスを見るとタイルイベントとなっていますが

タイルイベントとは何のことでしょうか。

マップイベントと同義なのでしょうか?

謎ですが、ともあれうまくいって良かったです。

貴重な情報をご提供くださり、誠にありがとうございました。
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 【解決済み】フォロワーの下にあるイベントを取得する方法

投稿記事by 名無し蛙 » 2022年9月07日(水) 23:32

あーなるほど。これは自分の確認ミスです。
イベント画像に「タイルセット」を割り当てた場合と割り当ててない場合で分類が異なります。
自分のテスト環境ではタイルセットに割り当てた画像を使用していたので気付かなかったんですけど
tileEventsXyはタイルイベントのみを抽出するメソッドです。
イベント全てを対象に取る時はeventsXyを使用するべきでしたね。
eventIdXyだと少しアクセスが迂遠になります。

コード: 全て選択

// フォロワー0番目(プレイヤ含む隊列の2番目)の取得
const c = $gamePlayer.followers().follower(0);
// フォロワーのxy座標から該当位置のイベント配列を取得
const events = $gameMap.eventsXy(c.x, c.y);
// イベント配列長が1以上の場合
if (0 < events.length) {
    // 先頭イベントの名前のコンソール出力
    console.log(events[0].event().name);
    // 先頭イベントのIDのコンソール出力
    console.log(events[0].eventId());
}

確認が不十分で手間取らせてしまい申し訳ありませんでした。
累積比率パレートマン
記事: 33
登録日時: 2022年1月12日(水) 01:12

Re: 【解決済み】フォロワーの下にあるイベントを取得する方法

投稿記事by 累積比率パレートマン » 2022年9月07日(水) 23:46

名無し蛙 様

なるほど!

イベントのキャラ画像にマップタイルを設定した場合のみ取得できるのが、tileEventsXyなのですね。

このようなピンポイントなものがあるのも驚きでしたが、

eventIdXyではなくeventsXyを使うとidとnameが綺麗に取得できる点も、非常に有益な情報です。

いただいたコードをありがたくご利用させていただこうと思います。

この度は、最後まで丁寧にご対応くださいまして、誠にありがとうございました。

今後とも、何卒よろしくお願い申し上げます。

“MV:質問” へ戻る