武器の情報を取得する

Mod作成

弾薬の取得

武器から直接取得

武器から直接取得する方法は、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を用意して装備させることで取得する方法があります。

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