コンパニオンのステータスを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