フォロワーの雇用状態を読み解く

Modを作ろう

Skyrimのフォロワーは実装が色々あって大変です。それぞれのケースでフォロワーを取得していきます。

Skyrimのフォロワーは実装が色々あって大変です。それぞれのケースでフォロワーを取得していきます。

バニラのフォロワーを取得する

バニラにはフォロワーの枠組みが標準で用意されていて、フォロワーになってくれるアクターも数名用意されています。例えばメインクエストを進めていくと従者候補として登場するリディアがそうです。

バニラフォロワーがいるかどうかだけでよいなら、グローバル変数のPlayerFollowerCountを調べます。これが1ならフォロワーがいる状態です。いるかいないかだけなのであまり実用的ではないです。

誰がバニラフォロワーとして従っているかを知りたい場合は、クエストDialogueFollowerのリファレンスエイリアスFollowerを調べます。

332 (papyrus)

ReferenceAlias Property FollowerRef Auto ; CKでプロパティを設定しておく

Function CheckFollower()
    Actor kFollower = FollowerRef.GetActorReference()

    if kFollower != None
        Debug.Trace("Follower is " + kFollower)
    endif
EndFunction

バニラフォロワーに独自のパッケージを適用させたいのなら

  • 自前のクエストを用意する
  • 自前のクエストに自前のリファレンスエイリアスを用意する
  • 自前のパッケージを用意して自前のリファレンスエイリアスに割り当てる
  • DialogueFollowerのFollowerを取得して自前のリファレンスエイリアスに代入する

という形になります。

ドーンガードのセラーナを取得する

DLCのドーンガードに登場するセラーナもフォロワーになってくれるアクターですが、バニラフォロワーの枠組みとは違うようです。セラーナは独自のAIで動いている特別なアクターなので、セラーナを雇用していてもDialogueFollowerには割り当てられません。

セラーナのファクションやパッケージを追いかけていくと、クエストDLC1_NPCMentalModelに割り当てられているDLC1_NPCMentalModelScriptに雇用状態を表す変数を見つけました。

IsDismissedがfalseで雇用中、trueで解雇している状態のようです。また、「ついてこい」と「ここで待て」の指示でIsWaitingとIsFollowingが設定されるようです。

セラーナに割り当てられるパッケージの1つにDLC1NPCSandboxAroundPlayer600というのがあります。Conditionsの中にGetVMQuestVariableという関数があり、IsFollowingを参照しているのがわかります。セラーナを雇用中かどうかを厳密に検査するのであれば、IsDismissedが0の時、となるのでしょう。

私がフォロワーに特別な動作をさせるModを作った時は、セラーナがプレイヤーと同じ場所にいるかどうかを見るようにしました。こういうので事足りてしまうので、別に厳密に調べなくてもいいんですよね。

セラーナを雇用している間はWIFollowerCommentFactionというファクションに所属するようです。これは洞窟等の前に来たときにその場に応じたセリフを言わせるもののようです。このファクションに所属しているかどうかをみるのもいいと思います。

Modで追加されるフォロワーを取得する

実装はModの数ほどあるので、厳密に取得していくには、Modの実装を読み解いて、Actorを取り出していかなくてはなりません。

実は簡単に取得する方法があります。Modで追加されるフォロワーはCurrentFollowerFactionというFactionに所属することが多いです。バニラフォロワーもそうです。ですから「CurrentFollowerFactionに属しているActor」という条件をQuestのReference AliasやSpellのMagic Effectに設定すれば、現在雇用中のフォロワーをまとめて検出できます。

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