返信先: ARMA3 ミッションエディットスレ

ホーム フォーラム TRI Gaming フォーラム ARMA3 ミッションエディットスレ 返信先: ARMA3 ミッションエディットスレ

#228484

ミッション中に、自分と同じ装備のAIをすぐ近くにスポーンさせて自分のグループに参加させるscript

/*
	v1.0.000
	
	*サーバ上で実行する
	*大量に本スクリプトを呼び出さないようにする
	
	Parameters:
		1: Unit: 装備の参照元ユニット
		2: Group: スポーンするユニットが所属するグループ
			-> *nilやnullの場合は新規にグループを作成
		3: Position: スポーンする場所(座標)
			-> *未指定の場合はパラメータ1で指定したユニットの近くにスポーン
		
	Example: 
		*player1というのはユニットに付けた名前(Variable Name)
		_nil = [player1] execVM "spawnIdenticalUnit.sqf" // player1と同じ装備のユニットをplayer1の近くにスポーン
		
		Other: 
			[player1, group player1] // 同じ装備のユニットを近くに作成し、同じグループに入れる
			[player1, group player1, getPos player2] // 上記とほぼ同じだが沸く場所がplayer2の近くになる
			
		*スポーンしたユニットの値が欲しい時
			_spawnedUnit = [player1] call (compile preprocessFileLineNumbers "spawnIdenticalUnit.sqf")
		
	Return: Spawned Unit
*/

spawnIdenticalUnit.sqf

#define VARNAME_SAVED_INV "TRI_savedInventory"

if !(isServer) exitWith {};
private ["_unit", "_grp", "_spawnPos"];
_unit 	= param [0, objNull, [objNull]];
_grp 	= param [1, grpNull, [grpNull]];
_spawnPos = param [2, [], [[]], [2, 3]];

if (isNull _unit) exitWith {};
private ["_side", "_unitClass", "_clone"];
_side = side _unit;
_unitClass = typeOf _unit;

// 装備内容の保存
[_unit, [_unit, VARNAME_SAVED_INV]] call BIS_fnc_saveInventory;

// スポーンさせるユニットの作成
if (isNull _grp) then {_grp = createGroup [_side, true]};
if (_spawnPos isEqualTo []) then {_spawnPos = getPos _unit};
_clone = _grp createUnit [_unitClass, _spawnPos, [], 0, "FORM"];

// 装備のコピー(反映, 読込)
[_clone, [_unit, VARNAME_SAVED_INV]] call BIS_fnc_loadInventory;

_clone