返信先: Arma3 スクリプト公開スレ

ホーム フォーラム TRI Gaming フォーラム Arma3 スクリプト公開スレ 返信先: Arma3 スクリプト公開スレ

#214903

2、3回読んでも「?」な状態でしたがスペルミスを考慮した所、
ModulesのSupports -> 「Supports Provider: Supply Drop」で
「ドロップされる弾薬箱に対してマップマーカー及びスモークを取り付けたい」と理解しましましたがお間違いないでしょうか。

言語は英語を基準としますので、エディッタを日本語表記にしている場合は適当に訳して御覧ください。

【Supports Provider: Supply Drop (Virtual)】
(Virtual)無しの場合でもCrate initの所を一緒にすればいいです。
編集画面解説

  • Vehicle types: Supportで呼ぶヘリのクラスネームを記載する(複数可)
  • Vehicle init: ヘリがスポーンした(湧いた)時に実行する処理(init欄に書くようなこと)
  • Crate init: 弾薬箱がスポーンした(投下された)時に実行する処理

(残りはどんな効果があるかわからないので最低限なところだけ書きました。)
initとあるところで注意しないといけないのは、thisではなく、_thisとするところです。

ご要望を含めた設定例

  • Vehicle types: [“B_Heli_Transport_01_F”]
  • Vehicle init:
  • Crate init: ["AmmoboxInit",[_this,true]] call BIS_fnc_arsenal;[_this,"SmokeShellYellow"] execVM "supplyDropMarker.sqf"

(Crate init 他の例)

[_this] execVM "supplyDropMarker.sqf" // *スモークなし, マーカー自動作成
[_this,"SmokeShellYellow"] execVM "supplyDropMarker.sqf" // イエロースモーク, マーカー自動作成
[_this,"", "marker_1"] execVM "supplyDropMarker.sqf" // *スモークなし, marker_1と名前を付けたマーカーを使う

_this: マーカーを付けたいオブジェクトの名前(Variable Name)
“SmokeShellYellow”: スモークのクラスネーム(“”にするとスモーク無しになる)
“marker_1”: ドロップしたボックスにつけるマーカーの名前(Variable Name)

弾薬箱の位置に好きなマーカーを使用する時
ミッションエディッタでMAP上に好きなマーカーを置いて、Alphaを0%にし、
そのマーカーの名前を上記例の3つ目のように指定するとそのマーカーが投下されたボックスの所に置かれます。

supplyDropMarker.sqf

if !(isServer) exitWith {};
params ["_ammoBox", ["_smokeClass", "", [""]], ["_dropMrk", "", [""]]];

/* メイン処理 */
// 弾薬箱が地面に接地するまでマーカーの作成は保留する
waitUntil {
	private "_pos";
	_pos = getPos _ammoBox;
	sleep 3;
	getPos _ammoBox distance _pos < 1
};

// マーカーの設置
if (_dropMrk isEqualTo "") then {
	// 予めマーカーが用意されていなかった場合
	for "_i" from 0 to 9 do {
		_dropMrk = format ["FDM_dropMarker_%1", random 10000];
		if (markerType _dropMrk isEqualTo "") then {_i = 9};
	};
	_dropMrk = createMarker [_dropMrk, _ammoBox];
	_dropMrk setMarkerShape "ICON";
	_dropMrk setMarkerType "hd_objective";
	_dropMrk setMarkerColor "ColorGreen";
	_dropMrk setMarkerText "Dropped supply";
} else {
	// マーカーが用意されていた場合は移動させる
	_dropMrk setMarkerAlpha 1;
	_dropMrk setMarkerPos (getPos _ammoBox);
};

// スモークの生成
//if !(isServer) exitWith {};
if !(_smokeClass isEqualTo "") then {
	private "_smoke";
	_smoke = _smokeClass createVehicle (getPos _ammoBox);
	_smoke setPos (getPos _ammoBox);
};

専用サーバー上でのcreateMarkerの挙動がわからないので、万が一、専用サーバー上でマーカーが作成されなかった場合は、
1行目のif !(isServer) exitWith {};を削除して、// スモークの生成直下のスラッシュ2個を削除してください。

こんなかんじ

if !(isServer) exitWith {};
if !(_smokeClass isEqualTo "") then {
	private "_smoke";
	_smoke = _smokeClass createVehicle (getPos _ammoBox);
	_smoke setPos (getPos _ammoBox);
};

スモークやマーカーがズレるってのは、パラシュートが風で流されて、
最終的に接地した地点がドロップした地点とズレるって事だったんですね。