arma3でチキンクリスプ食べながらスクリプト

arma3のエディッタ向けスクリプトを自分用に投稿

getUnitLoadoutとsetUnitLoadoutコマンドを使った装備の取得と設定

例えばプレイヤーの装備情報をすべて取得するにはgetUnitloadoutコマンドを使う

getUnitloadout Player;

返ってくる値は配列になる
一例:
[
["arifle_MX_SW_Black_F","muzzle_snds_H","acc_flashlight","optic_Hamr",["100Rnd_65x39_caseless_black_mag",100],,"bipod_01_F_blk"],
["launch_MRAWS_green_F","","acc_pointer_IR","",["MRAWS_HEAT_F",1],
,""],
["hgun_Pistol_heavy_01_green_F","muzzle_snds_acp","acc_flashlight_pistol","optic_MRD_black",["11Rnd_45ACP_Mag",11],,""],
["U_O_R_Gorka_01_black_F",[["FirstAidKit",1],["100Rnd_65x39_caseless_black_mag",1,100],["11Rnd_45ACP_Mag",1,11]]],
["V_PlateCarrierSpec_blk",[["100Rnd_65x39_caseless_black_mag",3,100],["11Rnd_45ACP_Mag",2,11]]],
["B_AssaultPack_blk",[["MRAWS_HEAT_F",2,1],["MRAWS_HE_F",1,1]]],
"H_HelmetSpecO_blk",
"G_AirPurifyingRespirator_01_F",
["Laserdesignator_01_khk_F","","","",["Laserbatteries",1],
,""],
["ItemMap","ItemGPS","ItemRadio","ItemCompass","ItemWatch","NVGoggles_OPFOR"]
]

この配列の並びを理解すればsetUnitLoadoutを使えば任意に装備を設定できる
容量をオーバーして弾倉50個等でも一応持たせられる
例えばプレイヤーのライフルにNVSスコープを取り付ける場合は次のようにする。

Player setUnitLoadout [[nil,nil,nil,"optic_nvs",nil,nil,nil],nil,nil,nil,nil,nil,nil,nil,nil,nil];

ここで注意したいのはnilの代わりに""を使わないこと
""を使うとアイテムが削除される

応用的な使い方
getUnitloadoutを使ってプレイヤーのメイン武器からスコープを外すスクリプトを作るなら次のようなものが出来上がる

_init = getUnitloadout Player;
_RifleArray = _init select 0;
_RifleArray set [3,""];
Player setUnitLoadout _init;

照準器のクラスネームを""にして無理矢理に外している
しかしこれでは外すまでの工程が長くなってしっている
そこで似たコマンドにremovePrimaryWeaponItemを使う
このコマンドは例えばプレイヤーのライフルに取り付けたNVSスコープを外す場合次のように打つ

Player removePrimaryWeaponItem "optic_nvs";

しかしこの場合は外したい照準器のクラスネームを知っておく必要があるのでgetUnitloadoutを応用して照準器のクラスネームを取得する。

Player removePrimaryWeaponItem ((getUnitloadout Player select 0)select 3);


ここまで小難しく書いてきたがもっと簡単なコマンドもある

primaryWeaponItems unit;
secondaryWeaponItems unit;
handgunItems unit;

それぞれ配列で返ってくる
0番目:銃口
1番目:ライト
2番目:照準器
3番目:二脚
空の場合はnilでなく””で返ってくることに注意

弾倉を知りたい場合は次のコマンドを使う

primaryWeaponMagazine unit;
secondaryWeaponMagazine unit;
handgunMagazine unit;

配列で弾倉のクラスが返ってくるがgetUnitLoadoutと違い装填数は返ってこないことに注意
弾倉がない場合、空の配列[]で返ってくる



以下getUnitLoadoutで得られる配列の解説

配列0番目:ライフル
0列目:本体クラス
1列目:銃口クラス
2列目:ライトクラス
3列目:照準器クラス
4列目:配列[弾倉クラス,弾数]
5列目:配列[榴弾,弾数]
6列目:二脚クラス
配列1番目:ランチャー
0列目:本体クラス
1列目:銃口クラス(?)対応クラス未確認
2列目:ライトクラス
3列目:照準器クラス
4列目:配列[弾種クラス,弾数]
5列目:配列[]対応クラス未確認
6列目:二脚クラス(?)対応クラス未確認
配列2番目:ハンドガ
0列目:本体クラス
1列目:銃口クラス
2列目:ライトクラス
3列目:照準器クラス
4列目:配列[弾倉クラス,弾数]
5列目:配列[榴弾,弾数](?)対応クラス未確認
6列目:二脚クラス(?)対応クラス未確認
配列3番目:ユニフォーム
0列目:衣服クラス
1列目:配列[任意のアイテムクラス,所持数,(弾倉の装填数)]
配列4番目:ベスト
0列目:ベストクラス
1列目:配列[任意のアイテムクラス,所持数,(弾倉の装填数)]
配列5番目:バックパック
0列目:バックパッククラス
1列目:配列[任意のアイテムクラス,所持数,(弾倉の装填数)]
配列6番目:ヘルメット
ヘルメットクラス
配列7番目:フェイス
フェイスクラ
配列8番目:双眼鏡
0列目:本体クラス
1列目:対応クラス未確認
2列目:対応クラス未確認
3列目:対応クラス未確認
4列目:配列[弾倉クラス,弾数]レーザー目標指示装置の場合の電池に使用
5列目:対応クラス未確認
6列目:対応クラス未確認
配列9番目:小道具
0列目:地図
1列目:GPS
2列目:無線機
3列目:コンパス
4列目:時計
5列目:暗視装置