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

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

機能しないファンクション

ターゲットを見つけたらブール値を返すはずのファンクションがエラーを出す。
BIS_fnc_enemyDetected

f:id:question_and_life:20200229030525j:plain

/*
	Author: Jiri Wainar

	Description:
	Return true if unit knows about nearby enemy unit or driven vehicle.

	Parameter(s):
	_this: unit that is inspected

	Returns:
	_knowsAboutEnemy:bool

	Example:
	_knowsAboutEnemy:bool = _unit call BIS_fnc_enemyDetected;
	_knowsAboutEnemy:bool = [_unit(,_distance)] call BIS_fnc_enemyDetected;
*/

private _unit     = _this param [0,objNull,[objNull]];
private _distance = _this param [1,300,[123]];

private _detected   = false;

private _targets = _unit targetsQuery [objNull, sideUnknown, "", [], 0];
private _enemySides = _unit call BIS_fnc_enemySides;

if (_distance == -1) then
{
	{if ((_x select 2) in _enemySides) exitWith {_detected = true}} forEach _targets;
}
else
{
	{if ((_x select 2) in _enemySides && {_unit distance (_x select 4) < _distance}) exitWith {_detected = true}} forEach _targets;
};

_detected


この最後のローカル変数"_detected"がエラーを起こしている。


そこで新しいコードを作ろうと思うが気になる機能がある。

private _targets = _unit targetsQuery [objNull, sideUnknown, "", [], 0];

targetsQuery について
_unit が sideUnknownで把握済みのターゲットを_targetに返す

ターゲットをフィルタリングする時の配列
[targetIgnore, targetSide, targetType, targetPosition, targetMaxAge]

左から
結果から除外するターゲットオブジェクト - すべての目標にはobjNull
ターゲットにするサイド - 任意のサイド sideUnknown
ターゲットにするオブジェクト -すべてのオブジェクト ""
ターゲットの位置([x,y]のみ考慮)許容差200m []-任意の位置
ターゲットの最大年齢(?) ここが詳細不明 - すべて0

つまり上のtargetsQueryは
除外オブジェクトなし、任意のサイド、すべてのオブジェクト、任意の位置、全年齢
を条件にしている。

返す値について

[accuracy, target, targetSide, targetType, targetPosition, targetAge]

左から
ターゲットの条件合致度 0~1の間 上のフィルタリング条件にどれだけ合致しているかを見る
ターゲットオブジェクト
ターゲットサイド
ターゲット種類 typeOfで返す合致なしは""で返す
ターゲット位置 [x,y]で返す
ターゲット年齢 数値 秒単位で返す(負の値も可能)

ということである。