弾薬がHUD上に表示されるようになるので、現在使用中の武器がわかるようにもなっています。
表示されない場合がある
Horizon環境だからなのかわかりませんが、一部の武器は正常に表示されません。
スクリプトを修正したら表示されるようになりました。
プレイヤーが「WeaponTypePlasmaまたはQuickkeyGunというキーワードを持つ何かを装備していたら」という条件をなくしました。これが何を意味しているのかは不明ですが、Horizon環境では不適切ということなのだと思います。
ammoUItoounScript.psc (papyrus)
Function showammotype()
Actor PlayerREF = Game.GetPlayer()
Form curchangeammotype_ = Self.GetcurrentWPAmmotype()
if PlayerREF.GetEquippedWeapon(0) == WEAP_syringer
cur_wp_ammoicon = 5
endif
;if PlayerREF.WornHasKeyword(KYWD_92a86) || PlayerREF.WornHasKeyword(KYWD_92a85)
loadgameEquipped_only = 1
cur_HasSilencer = PlayerREF.WornHasKeyword(KYWD_1e05d6)
Ammo curammotypeammo = None
if curchangeammotype_ != None
curammotypeammo = curchangeammotype_ as Ammo
if curammotypeammo
cur_ammotype_ = curammotypeammo.GetName()
if cur_ammotype_ == ""
curammotypeammo = PlayerREF.GetEquippedWeapon(0).GetAmmo()
if curammotypeammo
cur_ammotype_ = curammotypeammo.GetName()
endif
endif
else
cur_ammotype_ = ""
endif
else
curammotypeammo = PlayerREF.GetEquippedWeapon(0).GetAmmo()
if curammotypeammo
cur_ammotype_ = curammotypeammo.GetName()
else
cur_ammotype_ = ""
endif
endif
if cur_ammotype_ == ""
cur_ammotype_ = "unknown"
endif
cur_wp_ammoicon = 0
if curammotypeammo
if curammotypeammo == Ammo_plasma || curammotypeammo == Ammo_fusion0 || curammotypeammo == Ammo_fusion1 || curammotypeammo == Ammo_fusion2 || curammotypeammo == Ammo_fusion3 || curammotypeammo == Ammo_fusion4 || curammotypeammo == Ammo_fusion5 || curammotypeammo == Ammo_fusion6 || curammotypeammo == Ammo_fusion7 || curammotypeammo == Ammo_fusion8 || curammotypeammo == Ammo_fusion9
cur_wp_ammoicon = 2
elseif curammotypeammo == Ammo_Missile0 || curammotypeammo == Ammo_Missile1 || curammotypeammo == Ammo_Missile2
cur_wp_ammoicon = 3
elseif curammotypeammo == Ammo_Flamer0 || curammotypeammo == Ammo_Flamer1
cur_wp_ammoicon = 4
endif
endif
if Game.IsPluginInstalled("LString_Bow.esp")
Keyword bowkeybow = Game.GetFormFromFile(60697, "LString_Bow.esp") as Keyword
if PlayerREF.WornHasKeyword(bowkeybow)
cur_wp_ammoicon = 1
endif
elseif Game.IsPluginInstalled("LString_Bow.esl")
Keyword bowkeybow = Game.GetFormFromFile(60697, "LString_Bow.esl") as Keyword
if PlayerREF.WornHasKeyword(bowkeybow)
cur_wp_ammoicon = 1
endif
endif
Self.swfmessage(cur_ammotype_, 1, 0)
Self.StartTimer(9.5, 31457660)
;else
; cur_ammotype_ = ""
; Self.swfmessage("", 0, 0)
;endif
loadgameEquipped_only = 0
EndFunction
弾薬名を調整する
ソートModを使っている場合、アイテム名にタグが含まれているので、それがそのまま「(Ammo) 5mm弾」という形で表示されてしまいます。これを何とかしてみました。
SkyrimであればPapyrusUtilに文字列加工関数が用意されているので簡単に整形できますが、Fallout 4にはないので、どうやればいいのかわかりませんでした。仕方がないので弾薬の一覧を保持して置換しています。
Baka FrameworkにStringUtilと同等のモジュールがあるため、それを使えば除去できます。
cur_Throwntypename_ = cur_mine.GetName()
; ===== remove sort tag start
int i = StringUtil.Find(cur_Throwntypename_, "] ")
if i >= 0
cur_Throwntypename_ = StringUtil.Substring(cur_Throwntypename_, i)
endif
; ===== remove sort tag end