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

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

#216679
Stealer
メンバー

AI砲撃ユニットにFiremissionさせるsimple_artyスクリプト

何かと面倒だった砲撃をモジュールなし、単一スクリプトのポン置きで実現させようと思って作った簡易スクリプトです。
実体が存在するユニット用です。
飾り用にも実用にもいけます。SP/Dedicatedで動くよ

Arty_Test.Stratis.zip
テスト中に撮った参考にならない動画:ArmA3 Script – Simple AI Arty Script

つかいかた:
トリガなどに発動条件となる以下の構文を書きます
[[砲撃ユニット1,砲撃ユニット2],散布界n,1基当りの発射数n,次弾装填完了からのディレイ,ターゲット名,"砲撃終了後のユニット乗員へのオプション"] execvm "scripts\simple_arty.sqf";

[砲撃ユニット1,砲撃ユニット2] []の中に砲撃させたい砲撃ユニット名を書きます。「,」で区切っていくつでも入ります。

散布界n (整数) 着弾のバラケ具合[m]。

1基当りの発射数n (整数) 1回のfiremissionではなく、1基当りの発射数です。-1と入力すると死ぬまで撃ち続けさせられます。

次弾装填完了からのディレイ (整数)次弾装填完了後、次のシーケンスまでの遅延[sec]です。0で装填完了と同時に次第即次弾を照準/発射します。ユニットによって発射間隔が違うので、ここで調整します。

ターゲット名 (Varible Name) ゲームロジックでもユニット名でも何でもいいです。ターゲットの名前です。

砲撃終了後のユニット乗員へのオプション(“オプション名”) Firemission終了後の砲撃ユニットの要員を消すかのオプションです。

"ALL" ドライバーとガンナーを消去する
"DRIVER" ドライバーのみ消去する
"GUNNER" ガンナーのみ消去する
"false" 何もしない

例:
nul = [[arty_1,arty_2,arty_3],180,2,1,tgt,"false"] execvm "scripts\simple_arty.sqf";

なかみ:

if !(isserver) exitwith {};
private ["_arty_ary","_radius_init","_rounds_init","_tgt_init","_option_init"];

_arty_ary = _this select 0;
_radius_init = _this select 1;
_rounds_init = _this select 2;
_delay_init = _this select 3;
_tgt_init = _this select 4;
_option_init = _this select 5;

if (_rounds_init == -1) then {_rounds_init = 99999};

_ST_Arty = {
params ["_unit","_dispertion","_round","_delay","_target","_option"];

_tgt = getposasl _target;

sleep random 3;
for "_i" from 0 to (_round -1) do 
	{
		_unit setammo [currentweapon vehicle _unit, 999];
		_tgtpos = [ (_tgt select 0) - _dispertion + (2 * random _dispertion), (_tgt select 1) - _dispertion + (2 * random _dispertion), 0];
		
		_unit commandArtilleryFire [ _tgtpos, getArtilleryAmmo [_unit] select 0, 1];
		if (_i != _round) then {waituntil {currentcommand _unit == ""};};
		sleep _delay;
	};
	
	switch (_option) do {
		case "ALL":
		{
			deletevehicle gunner _unit;
			deletevehicle driver _unit;
		};
		
		case "DRIVER":
		{
			deletevehicle (driver _unit);
		};
		
		case "GUNNER":
		{
			deletevehicle (gunner _unit);
		};
	};
};

for "_i" from 0 to ((count _arty_ary) -1) do {
[(_arty_ary select _i),_radius_init,_rounds_init,_delay_init,_tgt_init,_option_init] spawn _ST_Arty;
};