スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OBSEのイベントハンドラに関して(その3)

(その2)の続きです。
 
(その2)で頂いたコメントの通り「別のセーブデータをロードしても登録済みのイベントハンドラが残って動き続けている」のはOBSEの動作仕様であると思われます。
(コメントありがとうございました!)
OBSEv0020_betaでも動作仕様は変わっていないので今後もこの動作仕様だと思います。
しかし(その2)で発生しているように深刻な動作を引き起こしてしまうのもまた事実です(´・ω・`)

「じゃあタイトル画面に戻ったり別のセーブデータをロードする前に登録してあるイベントハンドラを自力で解除して対処しておこう!」と考えました。



1)別のイベントハンドラを使ってイベントを全て解除する案

OBSEのイベント種類には「LoadGame」や「PostLoadGame」という、いかにもロード時やロード前に呼ばれそうなイベントがあります。
このイベント用のハンドラを登録しておいてその中で「全ての登録済みイベントを解除する」ようにすれば一挙に解決できる!?

結果 → できませんでした

なぜかというと処理の流れとイベント発生のタイミングが…

↓ ロード開始
↓ クエスト変数がロードされていないのにイベントハンドラが呼び出されてしまう
↓ ロード完了
↓ 新しいゲームインスタンスが開始
↓ LoadGameイベントが発生
↓ PostLoadGameイベントが発生

完全に手遅れです、本当にありがとうございました…



2)毎フレーム監視を行いポーズメニューやロード画面やクイックロードを検知したら全てのイベントを解除する案

・ポーズ画面からタイトル画面へ戻る可能性がある場合(MenuMode 1013)
・別のセーブデータをロードしそうな場合(MenuMode 1038)
・クイックロードのキーが押された時(IsControlPressed 27)
上記のいずれかを検知したらすぐに全てのイベントを解除する。
もしキャンセルしてゲームに戻ってきた場合は再びイベントを登録し直す。

もうこれ以外の方法はないのでは?という感じの案で負荷などは完全に度外視です(´Д`;
現在「IgnoreFriendlyFireDamage v1.4」はこの方法を導入しており自分のオブリ環境で検証中です。
スポンサーサイト

コメント

非公開コメント

プロフィール

r_basilico

バジリコ風味 (r_basilico)
Twitter: r_basilico
Steam: r_basilico
艦これ: 嫁艦は祥鳳

リンク
最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。