SCRIPT ARMA LIBERATION OTAGE 3.0
2 participants
GRIFF - ARMA3 :: ARMA3 :: Scripts
Page 1 sur 1
Re: SCRIPT ARMA LIBERATION OTAGE 3.0
Ca vas No tu n as pas rencontré de problème avec le script . N hésite pas a faire des remontées si il y a !!
Bien a toi Nach
Bien a toi Nach
Nach- Messages : 513
Date d'inscription : 31/01/2016
Re: SCRIPT ARMA LIBERATION OTAGE 3.0
Merci .Je vais l'utiliser dès que possible
(!|!) NoQuarter- Messages : 708
Date d'inscription : 31/01/2016
SCRIPT ARMA LIBERATION OTAGE 3.0
Otage GRIFF 3.0
Comme promis avant mont depart en Vacances je me suis attelé a l amelioration du script concernant les otages.
toujours avec une mise en simple dans une mission
avec un spawncivil2.sqf et un dossier contenant 2 fichiers otagegriff\position.sqf
otagegriff\housep.sqf
Le script se declenche dans un trigger quand activation >> null= [2,"monmarker",100] execVM "spawncivil2.sqf";
>> [nombre d otage qui spawnent, "votre marqueur de l editeur" , radius de la zone de spawn souhaitée] execVM "spawncivil2.sqf";
voici le script Spawncivil2.sqf a mettre dans la racine du dossier. // task a supprimer en dessous si vous voulez supprimer la task
//-----------------------------------------------------------------------------------------------------------------------------------
// Nach @ Team-Griff >> griff.forumgaming.fr/
fncotage =
{
(_this select 0) playmove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
[(_this select 0), // nom de l objet dans leditzeur
"Liberer Otage", // nom de l addaction
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",// icone sur l objet
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa", // iconce qui change a laction
"player distance _target < 2", // condition activer l action
"player distance _target < 2", // condition pour qe l action soit continuer
{}, // insertion d un code qui s execute au debut de l action exemple {null = execVM Gcréeunedefense.sqf}
{}, // insertion d un script pendant la progression
{_target = _this select 0;
_Group = Group leader _target;
_target switchMove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
_target removeAction 0;
_joueurs = playableUnits;
_nombre = round(random ((count _joueurs)-1));
_cible = _joueurs select _nombre;
_targetPos = getPos _cible;
_posecentre = _targetpos;
_start_distance = 1000;
_xpos = _posecentre select 0;
_ypos = _posecentre select 1;
_zpos = _posecentre select 2;
_distance = _start_distance;
_angle = random 360;
_xxpos = (_distance * cos _angle);
_yypos = (_distance * sin _angle);
_xpos = _xpos + _xxpos;
_ypos = _ypos + _yypos;
_posecentre set [0, _xpos];
_posecentre set [1, _ypos];
_posecentre set [2, _zpos];
_waypoint = _Group addWaypoint [_targetpos, 0];
_waypoint setWaypointType "MOVE";
_waypoint setWaypointSpeed "FULL";
_message = format ["Merci soldat %1",name player];
hint _message;
sleep 20;
deleteVehicle _target;
}, // insertion du script a la fin de la pogression
{_message = format ["Depechez vous de me sauver soldat %1",name player];hint _message;}, // ici le script si l action est arrete si interuption
[],// argument si besoin il y a
5, // la duree que le joueur doit maintenir l action pour valider son objectif
0, // une priorité X
true , // si l on veux supprimer l addaction a la fin de laction
false //
] remoteExec ["BIS_fnc_holdActionAdd" ,[0,-2] select isDedicated, true]; // script globale pour serveur dedié
};
publicVariable "fncotage";
_Nombredemaison = (_this select 0);
_radius = (_this select 2);
//null = [(_this select 1)] execVM "tasko.sqf";
for [{_n=0}, {_n<_Nombredemaison}, {_n=_n+1}] do {
_pos1 = getmarkerpos (_this select 1);
_grp = createGroup civilian;
_unit = _grp createUnit ["C_man_shorts_1_F",_pos1, [], 0, "NONE"];
null = [_unit, _pos1,_radius] execVM "otagegriff\position.sqf";
null = [_unit] spawn fncotage ;
//hint "ca fonctionne";
//null = [(_this select 1)] execVM "tasko.sqf";
};
sleep 3;
if (isServer) then {
_listecivils = ["C_man_shorts_1_F"];
_listennemis = ["I_C_Soldier_Bandit_4_F","I_C_Soldier_Bandit_3_F","I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_5_F"];
_position = getmarkerpos (_this select 1);
_radiusmaison = (_this select 2);
_otage = nearestObjects [_position ,_listecivils,_radiusmaison];
{
_grb2 = createGroup east;
_grb3 = createGroup east;
_nombre2 = round(random ((count _listennemis)-1));
_nombre3 = round(random ((count _listennemis)-1));
_s11 = _listennemis select _nombre2;
_s12 = _listennemis select _nombre3;
_posx = (getPosatl _x select 0)+1;
_posy = (getPosatl _x select 1)-2;
_posz = (getPosatl _x select 2)+1.5;
_pos = [_posx,_posy,_posz];
_s11 createUnit [_pos, _grb2];
_posx = (getPosatl _x select 0)+1;
_posy = (getPosatl _x select 1)-2;
_posz = (getPosatl _x select 2)+1.5;
_pos1 = [_posx,_posy,_posz];
_s12 createUnit [_pos1, _grb3];
{null = [_x] execVM "otagegriff\housep.sqf";} foreach (units _grb3);
} forEach _otage;
};
// task
if (isserver) then {
pos9miss = getmarkerpos (_this select 1) ;
textoMiss = "Libérer les habitants";
misot1 = "obj9";
publicVariable "pos9Miss";
publicVariable "textoMiss";
publicVariable "misot1";
// creation est spawn de la task
[west,misot1,["",textoMiss, pos9Miss],"",true]call bis_fnc_taskCreate;
[misot1,pos9miss] call bis_fnc_taskSetDestination;
// validation par civil absent
trg9 = createTrigger["EmptyDetector",pos9miss];
trg9 setTriggerArea[1000,1000,0,false];
trg9 setTriggerActivation["CIV","NOT PRESENT",false];
trg9 setTriggerStatements["this", "hint 'otages liberer',nul = [misot1,""SUCCEEDED"",true] call bis_fnc_taskSetState; publicVariable 'misot1'; publicVariable 'textomiss';", ""];
publicVariable "trg9";
waitUntil {triggerActivated trg9};
sleep 5;
["obj9"] call BIS_fnc_deleteTask;
deleteVehicle trg9;
};
//-----------------------------------------------------------------------------------------------------------------
Voici les deux SQF a mettre dans le dossier otagegriff\ celui genere la patrouille des IAS dans les maisons
// housep.sqf
sleep 0.5;
if (!isServer) exitWith {};
private["_houseObjects","_position","_buildings","_newpos","_unit","_bposs","_i","_i2","_x"];
_unit = _this select 0;
_beh = if (count _this > 1) then {_this select 1} else {"SAFE"};
_wtime = if (count _this > 2) then {_this select 2} else {30};
if (_wtime < 0) then {_wtime = 30};
_x = 0;
_y = 0;
_t = 0;
_timeout = 0;
_notbugged = true;
_name = vehicleVarName _unit;
if (isNil _name) then {_name = "guard"};
if (_beh == "CARELESS"
or _beh == "SAFE"
or _beh == "AWARE"
or _beh == "COMBAT"
or _beh == "STEALTH")
then {_unit setBehaviour _beh}
else {_unit setBehaviour "SAFE"};
_position = getPos _unit;
_houseObjects = nearestObjects [_position, ["building"],15];
if(isNil("_houseObjects"))exitWith{nil};
if((count _houseObjects)==0)exitWith{nil};
_buildings = [];
{
if(str(_x buildingPos 0) != "[0,0,0]")then{_buildings set[(count _buildings),_x];};
}forEach _houseObjects;
if((count _buildings)==0)exitWith{nil};
_bPoss = [];
_a = 0;
while { _a < (count _buildings) } do {
_building = (_buildings select _a);
_i = 0;
while { ((_building buildingPos _i) select 0) != 0 } do {
_bPoss set [count (_bPoss), (_building buildingPos _i)];
_i = _i + 1;
};
_a = _a + 1;
};
_newPos = _bposs select floor(random count _bposs);
_unit setpos [_newpos select 0,_newpos select 1,1.2];
_i2 = 1;
while{_i2 < (count _bPoss) && (alive _unit)}do{
_newPos = (floor(random(count _bPoss)));
_newPos = _bPoss select _newPos;
waitUntil {unitReady _unit || _unit distance _newPos < 2};
_unit doMove _newPos;
waitUntil {unitReady _unit || _unit distance _newPos < 2};
sleep 15 + random 25;
_i2 = _i2 + 1;
};
-------------------------------------------------------------------------------------------------------------------------------------------
// position.sqf celui place l otage dans les maisons
_unit = (_this select 0);
_position = (_this select 1);
_radius = (_this select 2);
_houseObjects = nearestObjects [_position , ["HOUSE"],_radius];
if(isNil("_houseObjects"))exitWith{nil};
if((count _houseObjects)==0)exitWith{nil};
_buildings = [];
{
if(str(_x buildingPos 0) != "[0,0,0]")then{_buildings set[(count _buildings),_x];};
} forEach _houseObjects;
if((count _buildings)==0)exitWith{nil};
_bPoss = [];
_a = 0;
while { _a < (count _buildings) } do {
_building = (_buildings select _a);
_i = 0;
while { ((_building buildingPos _i) select 0) != 0 } do {
_bPoss set [count (_bPoss), (_building buildingPos _i)];
_i = _i + 1;
};
_a = _a + 1;
};
_newPos = _bposs select floor(random count _bposs);
_unit setpos _newpos;
_posx = (getPosatl _unit select 0)+0;
_posy = (getPosatl _unit select 1)-0;
_posz = (getPosatl _unit select 2)+1.2;
_pos = [_posx,_posy,_posz];
_unit setpos _pos;
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Comme promis avant mont depart en Vacances je me suis attelé a l amelioration du script concernant les otages.
toujours avec une mise en simple dans une mission
avec un spawncivil2.sqf et un dossier contenant 2 fichiers otagegriff\position.sqf
otagegriff\housep.sqf
Le script se declenche dans un trigger quand activation >> null= [2,"monmarker",100] execVM "spawncivil2.sqf";
>> [nombre d otage qui spawnent, "votre marqueur de l editeur" , radius de la zone de spawn souhaitée] execVM "spawncivil2.sqf";
voici le script Spawncivil2.sqf a mettre dans la racine du dossier. // task a supprimer en dessous si vous voulez supprimer la task
//-----------------------------------------------------------------------------------------------------------------------------------
// Nach @ Team-Griff >> griff.forumgaming.fr/
fncotage =
{
(_this select 0) playmove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
[(_this select 0), // nom de l objet dans leditzeur
"Liberer Otage", // nom de l addaction
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",// icone sur l objet
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa", // iconce qui change a laction
"player distance _target < 2", // condition activer l action
"player distance _target < 2", // condition pour qe l action soit continuer
{}, // insertion d un code qui s execute au debut de l action exemple {null = execVM Gcréeunedefense.sqf}
{}, // insertion d un script pendant la progression
{_target = _this select 0;
_Group = Group leader _target;
_target switchMove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
_target removeAction 0;
_joueurs = playableUnits;
_nombre = round(random ((count _joueurs)-1));
_cible = _joueurs select _nombre;
_targetPos = getPos _cible;
_posecentre = _targetpos;
_start_distance = 1000;
_xpos = _posecentre select 0;
_ypos = _posecentre select 1;
_zpos = _posecentre select 2;
_distance = _start_distance;
_angle = random 360;
_xxpos = (_distance * cos _angle);
_yypos = (_distance * sin _angle);
_xpos = _xpos + _xxpos;
_ypos = _ypos + _yypos;
_posecentre set [0, _xpos];
_posecentre set [1, _ypos];
_posecentre set [2, _zpos];
_waypoint = _Group addWaypoint [_targetpos, 0];
_waypoint setWaypointType "MOVE";
_waypoint setWaypointSpeed "FULL";
_message = format ["Merci soldat %1",name player];
hint _message;
sleep 20;
deleteVehicle _target;
}, // insertion du script a la fin de la pogression
{_message = format ["Depechez vous de me sauver soldat %1",name player];hint _message;}, // ici le script si l action est arrete si interuption
[],// argument si besoin il y a
5, // la duree que le joueur doit maintenir l action pour valider son objectif
0, // une priorité X
true , // si l on veux supprimer l addaction a la fin de laction
false //
] remoteExec ["BIS_fnc_holdActionAdd" ,[0,-2] select isDedicated, true]; // script globale pour serveur dedié
};
publicVariable "fncotage";
_Nombredemaison = (_this select 0);
_radius = (_this select 2);
//null = [(_this select 1)] execVM "tasko.sqf";
for [{_n=0}, {_n<_Nombredemaison}, {_n=_n+1}] do {
_pos1 = getmarkerpos (_this select 1);
_grp = createGroup civilian;
_unit = _grp createUnit ["C_man_shorts_1_F",_pos1, [], 0, "NONE"];
null = [_unit, _pos1,_radius] execVM "otagegriff\position.sqf";
null = [_unit] spawn fncotage ;
//hint "ca fonctionne";
//null = [(_this select 1)] execVM "tasko.sqf";
};
sleep 3;
if (isServer) then {
_listecivils = ["C_man_shorts_1_F"];
_listennemis = ["I_C_Soldier_Bandit_4_F","I_C_Soldier_Bandit_3_F","I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_5_F"];
_position = getmarkerpos (_this select 1);
_radiusmaison = (_this select 2);
_otage = nearestObjects [_position ,_listecivils,_radiusmaison];
{
_grb2 = createGroup east;
_grb3 = createGroup east;
_nombre2 = round(random ((count _listennemis)-1));
_nombre3 = round(random ((count _listennemis)-1));
_s11 = _listennemis select _nombre2;
_s12 = _listennemis select _nombre3;
_posx = (getPosatl _x select 0)+1;
_posy = (getPosatl _x select 1)-2;
_posz = (getPosatl _x select 2)+1.5;
_pos = [_posx,_posy,_posz];
_s11 createUnit [_pos, _grb2];
_posx = (getPosatl _x select 0)+1;
_posy = (getPosatl _x select 1)-2;
_posz = (getPosatl _x select 2)+1.5;
_pos1 = [_posx,_posy,_posz];
_s12 createUnit [_pos1, _grb3];
{null = [_x] execVM "otagegriff\housep.sqf";} foreach (units _grb3);
} forEach _otage;
};
// task
if (isserver) then {
pos9miss = getmarkerpos (_this select 1) ;
textoMiss = "Libérer les habitants";
misot1 = "obj9";
publicVariable "pos9Miss";
publicVariable "textoMiss";
publicVariable "misot1";
// creation est spawn de la task
[west,misot1,["",textoMiss, pos9Miss],"",true]call bis_fnc_taskCreate;
[misot1,pos9miss] call bis_fnc_taskSetDestination;
// validation par civil absent
trg9 = createTrigger["EmptyDetector",pos9miss];
trg9 setTriggerArea[1000,1000,0,false];
trg9 setTriggerActivation["CIV","NOT PRESENT",false];
trg9 setTriggerStatements["this", "hint 'otages liberer',nul = [misot1,""SUCCEEDED"",true] call bis_fnc_taskSetState; publicVariable 'misot1'; publicVariable 'textomiss';", ""];
publicVariable "trg9";
waitUntil {triggerActivated trg9};
sleep 5;
["obj9"] call BIS_fnc_deleteTask;
deleteVehicle trg9;
};
//-----------------------------------------------------------------------------------------------------------------
Voici les deux SQF a mettre dans le dossier otagegriff\ celui genere la patrouille des IAS dans les maisons
// housep.sqf
sleep 0.5;
if (!isServer) exitWith {};
private["_houseObjects","_position","_buildings","_newpos","_unit","_bposs","_i","_i2","_x"];
_unit = _this select 0;
_beh = if (count _this > 1) then {_this select 1} else {"SAFE"};
_wtime = if (count _this > 2) then {_this select 2} else {30};
if (_wtime < 0) then {_wtime = 30};
_x = 0;
_y = 0;
_t = 0;
_timeout = 0;
_notbugged = true;
_name = vehicleVarName _unit;
if (isNil _name) then {_name = "guard"};
if (_beh == "CARELESS"
or _beh == "SAFE"
or _beh == "AWARE"
or _beh == "COMBAT"
or _beh == "STEALTH")
then {_unit setBehaviour _beh}
else {_unit setBehaviour "SAFE"};
_position = getPos _unit;
_houseObjects = nearestObjects [_position, ["building"],15];
if(isNil("_houseObjects"))exitWith{nil};
if((count _houseObjects)==0)exitWith{nil};
_buildings = [];
{
if(str(_x buildingPos 0) != "[0,0,0]")then{_buildings set[(count _buildings),_x];};
}forEach _houseObjects;
if((count _buildings)==0)exitWith{nil};
_bPoss = [];
_a = 0;
while { _a < (count _buildings) } do {
_building = (_buildings select _a);
_i = 0;
while { ((_building buildingPos _i) select 0) != 0 } do {
_bPoss set [count (_bPoss), (_building buildingPos _i)];
_i = _i + 1;
};
_a = _a + 1;
};
_newPos = _bposs select floor(random count _bposs);
_unit setpos [_newpos select 0,_newpos select 1,1.2];
_i2 = 1;
while{_i2 < (count _bPoss) && (alive _unit)}do{
_newPos = (floor(random(count _bPoss)));
_newPos = _bPoss select _newPos;
waitUntil {unitReady _unit || _unit distance _newPos < 2};
_unit doMove _newPos;
waitUntil {unitReady _unit || _unit distance _newPos < 2};
sleep 15 + random 25;
_i2 = _i2 + 1;
};
-------------------------------------------------------------------------------------------------------------------------------------------
// position.sqf celui place l otage dans les maisons
_unit = (_this select 0);
_position = (_this select 1);
_radius = (_this select 2);
_houseObjects = nearestObjects [_position , ["HOUSE"],_radius];
if(isNil("_houseObjects"))exitWith{nil};
if((count _houseObjects)==0)exitWith{nil};
_buildings = [];
{
if(str(_x buildingPos 0) != "[0,0,0]")then{_buildings set[(count _buildings),_x];};
} forEach _houseObjects;
if((count _buildings)==0)exitWith{nil};
_bPoss = [];
_a = 0;
while { _a < (count _buildings) } do {
_building = (_buildings select _a);
_i = 0;
while { ((_building buildingPos _i) select 0) != 0 } do {
_bPoss set [count (_bPoss), (_building buildingPos _i)];
_i = _i + 1;
};
_a = _a + 1;
};
_newPos = _bposs select floor(random count _bposs);
_unit setpos _newpos;
_posx = (getPosatl _unit select 0)+0;
_posy = (getPosatl _unit select 1)-0;
_posz = (getPosatl _unit select 2)+1.2;
_pos = [_posx,_posy,_posz];
_unit setpos _pos;
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dernière édition par ('l|) Nach le Mar 2 Oct - 19:20, édité 3 fois
Nach- Messages : 513
Date d'inscription : 31/01/2016
GRIFF - ARMA3 :: ARMA3 :: Scripts
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|