Companion Status HUD

Mod紹介

コンパニオンのステータスをHUDで表示します。

インストール

前提としてHUDFrameworkが必要です。

見た目を綺麗にしたCompanion Status UI Remasteredもあります。Companion Status HUDに上書きして使います。

使い方

どうやら戦闘中だけ表示されるようです。

コンソールで以下のコマンドを入力するとすぐに表示されます。

cqf companionstatus ShowAllWidgets

うまくいけばこのように表示されます。

表示位置の調整は、以下のコマンドで行います。

cqf companionstatus setpos 0 0

setpos <x座標> <y座標>です。

改造について

CompanionStatusScript.pscに手を加えて、ゲームのロード時に上記の関数が実行されるようにしました。

表示位置が保存されないようなので、対応しました。

OnPlayerLoadGame関数は既にありますが、起動後の初期化処理を待つために、ある程度の時間を置く必要があります。

CompanionStatusScript.psc (papyrus)

float widgetX
float widgetY

Function SetPos(string asAxis, float afValue)
    if asAxis == "x"
        hud.SetWidgetPosition(Self.CompanionStatus_Widget, afValue, 0, False)
        widgetX = afValue
    elseif asAxis == "y"
        hud.SetWidgetPosition(Self.CompanionStatus_Widget, 0, afValue, False)
        widgetY = afValue
    else
        hud.SetWidgetPosition(Self.CompanionStatus_Widget, asAxis as float, afValue, False)
        widgetX = asAxis as float
        widgetY = afValue
    endif
EndFunction

Event Actor.OnPlayerLoadGame(Actor akSender)
    VisibleWidgets.clear()
    Utility.Wait(2.0)
    ShowAllWidgets()
    SetPos(widgetX, widgetY)
EndEvent

並びが常にバラバラなのでソートさせてみました。コンパニオンのロード順が0x80以降だとおかしくなると思いますが、面倒なのでそのままです。

ソートする (papyrus)

Function RegisterCurrentFollowers()
    Int i = ActiveFollowers.Length
    while i > 0
        i -= 1
        HideWidget(ActiveFollowers[i].iFollowerID)
        ActiveFollowers.remove(i, 1)
    endwhile

    Actor[] CurrentFollowers = Game.GetPlayerFollowers()
    i = 0
    while i < CurrentFollowers.Length
        Int j = 0
        Int k = CurrentFollowers.Length - 1 - i

        while j < k
            Int j2 = j + 1

            if CurrentFollowers[j].GetFormID() < CurrentFollowers[j2].GetFormID()
                Actor tmp = CurrentFollowers[j]
                CurrentFollowers[j] = CurrentFollowers[j2]
                CurrentFollowers[j2] = tmp
            endif

            j += 1
        endwhile

        i += 1
    endwhile

    i = 0
    while i < CurrentFollowers.Length
        AddActor(CurrentFollowers[i])
        i += 1
    endwhile

    i = 0
    while i < ActiveFollowers.Length
        SetFollowerName(ActiveFollowers[i].iFollowerID)
        i += 1
    endwhile
EndFunction

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