それぞれのModにカメラを制御させる

Mod作成

カメラの制御にCustom Cameraを使用しています。他のModが何かをするタイミングでカメラを切り替えたいと思います。その手順についてまとめます。

シナリオ

Tactical Action Extension Packageで伏せている間はカメラのプリセットを3にして、伏せるのをやめたら元のプリセットに戻します。

Mod間の連携はRegisterForCustomEventを使います。SkyrimのModEventとは使い方が違っています。

Custom Camera側の改造

コンパイルにはTactical Action Extension Packageのソースコードが必要になります。パスを通しておきましょう。

CustomCamera.psc (papyrus)

toounAnimationpackScriptmcm toounAnimationpack

Function Register()
    RegisterForExternalEvent("OnMCMSettingChange|" + MCMName, "OnMCMSettingChange")
    RegisterForControl("SecondaryAttack")

    if Game.IsPluginInstalled("tooun_Animationpack.esl")
        toounAnimationpack = Game.GetFormFromFile(0x801, "tooun_Animationpack.esl") as toounAnimationpackScriptmcm
        RegisterForCustomEvent(toounAnimationpack, "OnEnterProne")
        RegisterForCustomEvent(toounAnimationpack, "OnEnterLying")
        RegisterForCustomEvent(toounAnimationpack, "OnLeavePrevent")
    endif
EndFunction

Event toounAnimationpackScriptmcm.OnEnterProne(toounAnimationpackScriptmcm akSender, Var[] akArgs)
    if CC_Profile.GetValueInt() != 2
        SwitchProfile(2)
    endif
EndEvent

Event toounAnimationpackScriptmcm.OnEnterLying(toounAnimationpackScriptmcm akSender, Var[] akArgs)
    if CC_Profile.GetValueInt() != 2
        SwitchProfile(2)
    endif
EndEvent

Event toounAnimationpackScriptmcm.OnLeavePrevent(toounAnimationpackScriptmcm akSender, Var[] akArgs)
    if CC_Profile.GetValueInt() == 2
        SwitchProfile(0)
    endif
EndEvent

Tactical Action Extension Package側の改造

私の作った改造版に既に組み込んであります。

コツは、SendCustomEventは実行は速くてすぐに次の処理に進めますが、相手側に届いて処理が完了するまで時間がかかるので、早めに実行することです。

toounAnimationpackScriptmcm.psc (papyrus)

CustomEvent OnEnterProne
CustomEvent OnEnterLying
CustomEvent OnLeavePrevent

; うつ伏せに伏せる
Function EnterProne()
    SendCustomEvent("OnEnterProne")
    ; 以下略
EndFunction

; 仰向けになる
Function EnterLying()
    SendCustomEvent("OnEnterLying")
    ; 以下略
EndFunction

Function LeavePrevent()
    UpdateHUD(0)

    if IsProne || IsLying
        SendCustomEvent("OnLeavePrevent")
        ; 以下略
    endif
EndFunction

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