Il est possible de passer au script plusieurs positions de barrière, d'une même side ou de side différentes. Dans le cas de plusieurs barrières d'une même side, les gardes appartiennent a un seul et même groupe.
Différents paramètres sont passés pour chaque barrière :
1er paramètre : Position.
2ème paramètre : Direction.
3ème paramètre : Distance de déclenchement de l'animation.
4ème paramètre : Side.
// [[paramètre 1ère barrière],[paramètre 2ème barrière],...] execVM "nomduscript.sqf";
// Une barrière sur la base nord/ouest du Chernarus
[[[4542.5,9864,0],0,75,west]] execVM "nomduscript.sqf";
// Trois barrières, deux sur la base base sud (coté west) et une sur la base nord (coté east) du Takistan
[[[8205.9,2222.5],164,60,west], [[8470,1958],252,75,west], [[6127,11422,0],318,75,east]] execVM "nomduscript.sqf";
Si l'on ne veut pas que l'unité soit éliminé, on peut rajouter une ligne (ou enlever les slash qui mettent en commentaire une ligne dans le script ci-dessous) qui permet lors d'une attaque de la zone par des IA ENI, qu'ils ne se focalisent pas sur cette unité.
//Captive... (neutre, civil), à rajouter après la récupération de l'unité//
_unit setCaptive true;
//Et lui rajouter des NVG, s'il fait parti d'une armée correctement équipée//
if (typeOf _unit != "TK_Soldier_EP1") then {if !(_unit hasWeapon "NVGoggles") then {_unit addWeapon "NVGoggles";};};
//Et même invincible... De la même façon que pour rendre la barrière presque indestructible.//
_unit addeventhandler ["HandleDamage",{0}];
private ["_worldname","_count","_group","_i","_ar","_pos","_barrier","_distance","_side","_guard","_unit","_dir"];
_worldname = tolower worldName;
_count = count _this;
_group = grpNull;
for [{_i = 0},{_i < _count},{_i = _i + 1}] do {
_ar = _this select _i;
_pos = _ar select 0;
_barrier = createVehicle ["ZavoraAnim",_pos,[],0,"NONE"];
_barrier setPos _pos;
_barrier setDir (_ar select 1);
_barrier addEventHandler ["handleDamage", {0}];
_distance = _ar select 2;
_side = _ar select 3;
if (isNull _group) then {
_group = createGroup _side;
} else {
if (_side != side _group) then {_group = createGroup _side;};
};
_guard = switch (_side) do {
case west : {
if ((_worldname == "takistan") || (_worldname == "zargabad")) then {"CZ_Special_Forces_DES_EP1";};
if ((_worldname == "chernarus") || (_worldname == "utes")) then {"CDF_Soldier";};
};
case east : {
if ((_worldname == "takistan") || (_worldname == "zargabad")) then {"TK_Soldier_EP1";};
if ((_worldname == "chernarus") || (_worldname == "utes")) then {"RU_Soldier";};
};
default {_guard = "UN_CDF_Soldier_EP1"};
};
_unit = _group createUnit [_guard,getPos _barrier,[],0,"NONE"];
_dir = [_unit,_barrier] call BIS_fnc_dirTo;
_unit setDir _dir;
doStop _unit;
_unit setSkill ["spotDistance",1.0];
_unit disableAI "MOVE";
// _unit setCaptive true;
// _unit addeventhandler ["HandleDamage",{0;}];
// if (typeOf _unit != "TK_Soldier_EP1") then {if !(_unit hasWeapon "NVGoggles") then {_unit addWeapon "NVGoggles";};};
[_barrier,_distance,_unit,_side] spawn {
private ["_barrier","_distance","_unit","_side","_posunit","_pos","_goodguys","_phase","_anime","_array","_count","_i","_ar","_quidam","_dist"];
_barrier = _this select 0;
_distance = _this select 1;
_unit = _this select 2;
_side = _this select 3;
_posunit = getPos _unit;
_pos = getPos _barrier;
_goodguys = objNull;
_phase = 1;
while {damage _barrier < 0.95} do {
_anime = _barrier animationPhase "Bargate";
_array = nearestObjects [_pos,["car","Tank","Motorcycle"],_distance];
_count = count _array;
if ((_count) > 0) then {
_i = 0;
for [{_i = 0},{_i < _count},{_i = _i + 1}] do {
_ar = _array select _i;
_quidam = driver _ar;
_dist = _goodguys distance _barrier;
if (((side _quidam == _side) || (side _quidam == civilian)) && (speed _ar != 0)) then {
_goodguys = _quidam;
_phase = 0;
if (alive _unit) then {_unit move _posunit;};
} else {
if ((_dist > _distance) && (speed _ar == 0)) then {
_phase = 1;
};
};
_i = _i + 1;
sleep 0.001;
};
} else {
_phase = 1;
};
if (_phase != _anime) then {
_barrier animate ["Bargate",_phase];
if (alive _unit) then {
_unit enableAI "MOVE";
if (_phase == 0) then {
_unit doWatch (getPos _goodguys);
_unit setBehaviour "SAFE";
sleep 2;
_unit action ["SALUTE",_unit];
} else {
_unit doWatch objNull;
doStop _unit;
sleep 2;
};
_unit disableAI "MOVE";
};
};
sleep 3.3;
};
if (alive _unit) then {
_unit enableAI "MOVE";
// _unit setCaptive false;
// _unit removeEventHandler ["HandleDamage",0];
};
};
};
—- Original : BeTeP