弾薬の取得
武器から直接取得
武器から直接取得する方法は、Weaponレコードに設定されている弾薬になります。武器の標準の弾薬ということになると思います。
弾薬はアタッチメントで変更が可能です。そのため、アタッチメントで弾薬が変更されていると正しい値になりません。
装備していなくても弾薬を取得できます。
Weapon kWeapon = Game.GetPlayer().GetEquippedWeapon(0)
if kWeapon
Ammo kAmmo = kWeapon.GetAmmo()
endif
InstanceDataを使う
InstanceDataを使うと、アタッチメントで変更されていても正しい値を取得できます。キャッシュのようなものでしょうか。
現在装備中の武器のみ取得できます。
InstanceData:Owner kInstanceOwner = Game.GetPlayer().GetInstanceOwner(41)
Ammo kAmmo = InstanceData.GetAmmo(kInstanceOwner)
引数はBiped SlotのIndexになります。Slotではないので注意です。
アタッチメントを総当りする
アタッチメントを精査して総当りで探し出す実装です。
スクリプトでループするのでとても遅いのがデメリットです。また、装備中の武器しか取得できません。
Ammo kAmmo = none
ObjectMod[] kOMods = PlayerRef.GetWornItemMods(41)
int i = kOMods.Length
while i > 0
i -= 1
ObjectMod kOMod = kOMods[i]
ObjectMod:PropertyModifier[] kProperties = kOMod.GetPropertyModifiers()
int j = kProperties.FindStruct("Target", kOMod.Weapon_Target_poAmmo, 0)
if j != -1
if kProperties[j].Object
kAmmo = kProperties[j].Object
i = 0
endif
endif
endwhile
装備していない武器の弾薬は、ダミーのActorを用意して装備させることで取得する方法があります。