Création de dynamique de groupes d'IA
Ce script permet de créer un groupe d'ennemies à la volée.
Il s'agit d'une fonction qui peut être appelée de n'importe où dans vos scripts.
Dans le fichier Init.sqf placer le code suivant :
Createcenter east; Createcenter west; WEST setFriend [EAST,0]; EAST setFriend [WEST,0]; if(isServer) then { mk_group = compile preprocessFile "scripts\mk_group.sqf"; };
Cela permet de créer la fonction mk_group qui pourra être appelé à partir de vos scripts ou les champs appropriés dans l'éditeur
Toujours dans le fichier Init.sqf on placera le code suivant :
//Définition d'un groupe de 14 Caporaux Spetsnaz et 1 Sergent Spetsnaz ar_grp_sural= [ ["SoldierESaboteurMarksman","SERGEANT",1], ["SoldierESaboteurPipe","CAPORAL",14] ]; //Définition d'un groupe de 2 Caporaux Spetsnaz et 1 Sergent Spetsnaz ar_grp_suaz= [ ["SoldierESaboteurMarksman","SERGEANT",1], ["SoldierESaboteurPipe","CAPORAL",2] ]; //Définition d'un groupe de 2 Caporaux Spetsnaz et 1 Sergent Spetsnaz ar_grp_suaz2= [ ["SoldierESaboteurMarksman","SERGEANT",1], ["SoldierESaboteurPipe","CAPORAL",1], ["SoldierESaboteurPipe","CAPORAL",1], ];
Cela permet de définir de quoi seront composé nos groupes. Cette définition est rangée dans les tableaux : ar_grp_sural, ar_grp_suaz et ar_grp_suaz2
Pour l'insertion des unités sur la missions il faut placer le code ci-dessous dans l'activation d'un déclencheur ou d'un point de passage par exemple :
_p=position player; _grp=[[(_p select 0)+05, _p select 1, _p select 2],ar_grp_sural] call mk_group;
Le code récupère la position du joueur et la range dans la variable _p. Le groupe est créé par appel de la fonction mk_group
A noter que si on avait voulu doter le groupe d'un camion, on aurait appelé la fonction comme ceci :
_p=position player; _grp=[[(p select 0)+20, p select 1, p select 2],ar_grp_sural,"UralOpen"] call mk_group;
Pour créer un autre autres on pourrait écrire cela :
_p=position player; _grp1=[[(p select 0)+20, p select 1, p select 2],ar_grp_sural,"UralOpen"] call mk_group; _grp2=[[(p select 0)+40, p select 1, p select 2],ar_grp_sural,"UralOpen"] call mk_group;
//Création d'un groupe d'unité // Param1= Position du groupe [x,y,z] // Param2= Tableau du groupe d'unite // Param3= Vehicule ou vide // Return le groupe private ["_pos","_type","_vehicule","_vehic","_gp","_max","_i","_unit","_placelibre","_leader"]; _pos = _this select 0; _type = _this select 1; _vehicule = _this select 2; _gp = createGroup east; _gp allowFleeing 0; _gp setCombatMode "GREEN"; _gp setFormation "COLUMN"; _gp setSpeedMode "NORMAL"; sleep 0.1; if( _vehicule != "") then { _vehic = _vehicule createVehicle _pos; _vehic setDir 250; }; { _max=_x select 2; for "_i" from 1 to _max do { _x select 0 createUnit [_pos, _gp,"void=this;",Ennemy_skill,_x select 1]; if( _vehicule != "" ) then { _placelibre =_vehic emptyPositions "driver"; if(_placelibre>0) then { void moveInDriver _vehic; } else { _placelibre =_vehic emptyPositions "gunner"; if(_placelibre>0) then { void moveInGunner _vehic; }else{ void moveInCargo _vehic; }; }; }; sleep 0.001; }; } forEach _type select 0; _leader = leader _gp; _leader setRank "LIEUTENANT"; _gp;
—- clint 21/03/2009 23:24