【解決済み】イベントの現在ページIDを取得したい

そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

【解決済み】イベントの現在ページIDを取得したい

投稿記事by そみや » 2022年6月08日(水) 17:24

現在実行しているイベントIDは「 this._eventId 」ですが、
現在実行しているページIDはどうすれば取得できるのでしょうか?

下記のサイトにて同様の質問をされている方がいらっしゃいました。
その方は自力で解決されたようですが、方法が記載されていませんでした。
https://forum.tkool.jp/index.php?threads/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%9A%E3%83%BC%E3%82%B8id%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%81%84.1193/

恐らく、下記のコードをヒントに解決されたと思うのですが
このコードは現在実行しているイベントのページ総数を取得するものでした。

コード: 全て選択

$gameMap.events()[this.eventId()-1]._pageIndex+1


「 this._pageId 」や「 $dataMap.events[ this.eventId()-1 ].pages 」など試してみましたが上手くいきません。
最後に編集したユーザー そみや on 2022年6月09日(木) 22:48 [ 編集 1 回目 ]

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

Re: イベントの現在ページIDを取得したい

投稿記事by 名無し蛙 » 2022年6月08日(水) 18:59

そみや さんが書きました:恐らく、下記のコードをヒントに解決されたと思うのですが
このコードは現在実行しているイベントのページ総数を取得するものでした。

書き方が最適化されていないけどコード内容は最初から概ね合っています。
最後にpageIndex+1しているのを見て勘違いしたのでは?(表記番号に合わせようとしている)

コード: 全て選択

// 先頭ページを0番としてページindexの取得
$gameMap.events()[this.eventId()-1]._pageIndex

// eventを取得する場合はevents()[id - 1]ではなくevent(id)の方が良い
$gameMap.event(this.eventId())._pageIndex

// 更に起動したイベントを取得する場合はthis.character(0)の方が良い
this.character(0)._pageIndex
そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

Re: イベントの現在ページIDを取得したい

投稿記事by そみや » 2022年6月09日(木) 00:51

名無し蛙 様
返信ありがとうございます。

試してみました上手く取得することができませんでした。

実行している状態を下図にまとめてみました。
-----------------------------------------------------------------------------------------
イベントID:1で強制的に「イベントID:2のページID:5」を実行。
イベントID:2のページID:5で「現在ページを取得」の為のコモンを実行。
結果、「5」を取得したいが「19」でした。

同様の条件で「 this._eventId 」を実行すると「現在イベント = コモンを設置しているイベントID」は取得できているので、
ページIDも取得可能だと思うのですが上手くいきません。

※イベントID:1にて「ページID:5を代入」していますが、この時の値を取得する方法もありますが、
 あくまで「 this._eventId 」と同じ方法で取得したいです。
-----------------------------------------------------------------------------------------

ページIDの取得.jpg
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: イベントの現在ページIDを取得したい

投稿記事by 名無し蛙 » 2022年6月09日(木) 06:14

._pageIndexは簡単に言えば現在表示中のイベントページのインデックス番号を保持する為のもので
現在実行中のイベントリストを持つページのインデックス番号を保持している訳ではないので
反映されないのは当然ですね。
本来であればこの二つはイコールですけどCallEventPageで強引に呼び出しているので齟齬が生じています。

そみや さんが書きました:※イベントID:1にて「ページID:5を代入」していますが、この時の値を取得する方法もありますが、
 あくまで「 this._eventId 」と同じ方法で取得したいです。

上記の通りイレギュラーが起こっているのでその上で該当する変数、というと存在しません
純粋なスクリプトだけでページ番号の取得というと出来なくもなくないですが
普通にCallEventPageの時にpageIndexを控えておいた方が良いと思いますね…

一応自分が思いついたpageIndexの取得方法を載せておきます。
このコードを呼び出すまでに並列処理を混ぜていない事が条件です。

コード: 全て選択

// このコードを書いたコモンイベントを呼び出したイベントのページ番号を逆引きする
let i;
for ( i = $gameMap._interpreter; i._depth < this._depth - 1; i = i._childInterpreter );
const pageIndex = this.character(0).event().pages.findIndex(page => page.list === i._list);
$gameVariables.setValue(1, pageIndex); // ページインデックスを変数一番に格納

listの参照を比較しているだけだから重くはないはず…
でも非常に繊細なので正確な挙動を理解していない限り軽々に使えるものではないですね。
そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

Re: イベントの現在ページIDを取得したい

投稿記事by そみや » 2022年6月09日(木) 22:48

名無し蛙 様

ありがとうございます。
教えて頂いたコードにて、現在イベントのページIDを取得することができました。

CallEventPage中においては、通常通りの変数を取得することができないのですね。
まだ正確に挙動を理解できてはおりませんが、
このコードを使用させて頂きながら少しずつ勉強していきたいと思います。

“MV:質問” へ戻る