目が光るバグの対処方法

環境構築

たまにプレイヤーの目が光り続けることがあります。特定のセルに侵入すると起こるようです。起こる時と起こらない時があるみたいです。

たまにプレイヤーの目が光り続けることがあります。特定のセルに侵入すると起こるようです。起こる時と起こらない時があるみたいです。

ネットで検索すると出てくる対処法

ネットで検索すると、コンソールで以下のコマンドを実行するとなおるという情報が見つかります。

目が光るバグを修正するコンソールコマンド (papyrus)

player.addspell f71d1
player.removespell f71d1

ところが、私がこのバグに遭遇した時は、これでは直りませんでした。

このコマンドはいったい何をしているのかというと、ドラウグルの能力を追加して削除しています。ドラウグルの能力は4つのMagic Effectで構成されていて、そのうちの1つが目を光らせる効果になっています。

内容はスクリプトで自身の目の位置が光るVisual Effectを再生するというものです。再生時間は-1なので無期限です。そして、死んだ時に再生を停止するようになっています。また、Visual Effectは性別でわかれていて、対象の性別に合わせるようになっています。

これは現在のSkyrim SE + USSEP 4.2.1の場合で、昔は違ったのかもしれません。

何らかの原因でプレイヤーに対してVisual Effectが再生されてしまうので、目が光るということだと思います。また、ドラウグルの能力を追加・削除しても、死ななければ再生が停止しないのでダメです。そして、プレイヤーの性別と付与されてしまったVisual Effectが一致しているとも限らないわけです。

正しい対処法

というわけで、原因がわかったらなおすのは簡単です。

目が光るバグの対処、スクリプト版 (papyrus)

Scriptname FixEyeGlowScript Extends ReferenceAlias

VisualEffect Property FXDraugrFemaleEyeEffect Auto
VisualEffect Property FXDraugrMaleEyeEffect Auto

Event OnCellLoad()
    Utility.Wait(1.0)
    Actor kActorRef = GetActorReference()
    FXDraugrFemaleEyeEffect.Stop(kActorRef)
    FXDraugrMaleEyeEffect.Stop(kActorRef)
EndEvent

性別は無視して、とにかくセル移動時にVisual Effectをすべて停止させます。セル移動直後だとバグが発生する前かもしれないので、念のため1秒待ってからにしています。これでなおりました。

さらに検証した結果

PlayerがCloakで周囲のNPCにスペル(Abilitiy)を配布していると、たまに対象が一瞬だけ生存してすぐに消滅してしまう(死んでしまう?)場合があります。なぜ起こるのか、対象がスクリプト沸きで制御された結果によるものなのか、原因がわからないのですが、こういった場合のスペルは以下のようになります。

正常時異常時
SelfActiveMagicEffectNone
akTarget対象のActor対象のActor
akCaster対象のActorPlayer

OnEffectStartイベントが発火した時点でSelfがNoneになっている(スペルの効果が切れている)ため、Selfが必要な関数は軒並み失敗に終わります。それだけならいいのですが、実は大きな問題があって、引数のakCasterがPlayerになってしまいます。ですので、akCasterを対象に何かを行うと、意図せずPlayerを対象に処理が行われてしまうことがあるということです。おそらくこれがプレイヤーの目が光るバグの原因です。 対象に何かをする場合は、かならずakTargetを使わなければなりません。

タイトルとURLをコピーしました