Нашел на форуме кусочек скрипта, не могу разобраться, как сделать скрипт, для миссии - смысл (любая вражеская бронетехника и машины вошедшая в тригер засекается, отмечается маркером и атакуется дружественной артиллерией, попадание должно быть идеально точно. имена вражеской бронетехники заранее, в редакторе, не прописываются.
Если можно, то с примером миссии, или объяснением, как запускать.
Заранее благодарен за помощь!
Сам скрипт:
// Активация: _id = this addEventHandler ["fired", {_as = _this execVM "excalibur.sqf"}]
// имя снаряда
_shell = _this select 6;
//начальная позиция снаряда
_pos = getPos _shell;
// скорость снаряда
_speed = (speed _shell)/3.6;
// вектор снаряда
_vector = vectorDir _shell;
// угол возвышения
_a = acos (_vector select 2);
// ОПРЕДЕЛЕНИЕ ЦЕЛИ
// дальность полета снаряда
_L = (_speed^2 / 9.81)* sin (2*_a);
/* начальный угол ориентации снаряда
в горизонтальной плоскости
от севера по часовой стрелке */
_DIRo = direction _shell;
// долгота предполагаемого места падения снаряда
_X = (_pos select 0) + (_L*sin _DIRo);
// широта предполагаемого места падения снаряда
_Y = (_pos select 1) + (_L*cos _DIRo);
// высота предполагаемого места падения снаряда
_Z = _pos select 2;
// координаты предполагаемого места падения снаряда
_center = [_X,_Y,_Z];
// список объектов в выбранном радиусе от предполагаемого места падения снаряда
_objects = nearestObjects [_center, ["tank","car", "ship"], 400];
// резервируем массив целей
_targets = [];
//если сторона объекта ЗАПАД, то добавить имя объекта в массив целей
{if (side _x == west) then {_targets set [count _targets, _x]}} forEach _objects;
// ВЫБОР ЦЕЛИ ПО РЕЙТИНГУ
_i = 1;
_j = count _targets;
while {_j > _i} do
{
/* если рейтинг одного из элементов массива
больше чем рейтинг первого элемента*/
if ( rating (_targets select _j) > rating (_targets select 0))
// то:
then
{
// присваиваем переменной имя выбранного элемента массива
_candidate = _targets select _j;
// в массиве целей обнуляем выбранный элемент
_targets set [_j, objNull];
/* к массиву целей прибавляем имя выбранного элемента
(делаем его первым элементом массива целей)
одновременно удаляя из него обнуленный элемент*/
_targets = [_candidate] + _targets - [objNull];
};
_j = _j - 1;
};
// выбранная цель
_target = _targets select 0;
// НАВЕДЕНИЕ НА ЦЕЛЬ
// пока снаряд жив, выполнять:
while {alive _shell} do
{
// текущий вектор снаряда
_vectorShell = vectorDir _shell;
// если снаряд начал снижаться,
if (_vectorShell select 2 < 0)
// то
then {
// текущая позиция снаряда
_posShell = getPosASL _shell;
// текущая позиция цели
_posTarget = getPosASL _target;
// ОПРЕДЕЛЕНИЕ УГЛОВ НАПРАВЛЕНИЯ СНАРЯДА НА ЦЕЛЬ
// фактическое расстояние до цели
_disF = SQRT(_posShell distanceSqr _posTarget);
// расстояние до цели в плоскости YZ
_disYZ = [0, _posShell select 1, _posShell select 2] distance [0, _posTarget select 1, _posTarget select 2];
// угол между прямой от снаряда до цели и плоскостью YZ
_dirX = acos (_disYZ / _disF);
// расстояние до цели в плоскости XZ
_disXZ = [_posShell select 0, 0, _posShell select 2] distance [_posTarget select 0, 0, _posTarget select 2];
// угол между прямой от снаряда до цели и плоскостью XZ
_dirY = acos (_disXZ / _disF);
// расстояние до цели в плоскости XY
_disXY = [_posShell select 0, _posShell select 1, 0] distance [_posTarget select 0, _posTarget select 1, 0];
// угол между прямой от снаряда до цели и плоскостью XY
_dirZ = acos (_disXY / _disF);
_anglX = 0;
_anglY = 0;
_anglZ = 0 - _dirZ;
// если составляющие вектора скорости имеют знак "-", то заменить знак на "+"
if (_vectorShell select 0 < 0) then {_anglX = 0 - _dirX} else {_anglX = _dirX};
if (_vectorShell select 1 < 0) then {_anglY = 0 - _dirY} else {_anglY = _dirY};
// направляем вектор скорости снаряда на цель
_shell setVelocity [_speed*(sin _anglX), _speed*(sin _anglY), _speed*(sin _anglZ)];
};
sleep 0.1;
};