Voici un script qui permet de placer des IED sur le terrain. J'ai créé ce script pour qu'il réponde à mes besoins car ce qu'on peut trouver sur différents sites ne me convenait pas.
Il y a deux types d'IED : Radio et Bomb. Le type Radio est matérialisé par un poste radio FM, il s'agit alors d'un IED dissimulé. Le type Bomb est un missile, il s'agit alors d'une munition non explosée convertie en IED.
L'IED explose lorsqu'un joueur (BLUFOR) se trouve dans un rayon de moins de 1.5m pour un IED type Radio, ou de 5m pour un IED de type Bomb.
Un IED peut aussi être neutralisé (il explose) en tirant dessus ou en utilisant un explosif (charge, grenade, …).
- Créer un fichier nommé R3F_IED.sqf dans lequel vous copierez le script ci-dessous.
- Appelez ce script dans le fichier init.sqf par la commande suivante : nul = [] execVM “R3F_IED.sqf”;
- Créez vos propres IED en remplissant (en colonne) les tableaux commençant par “R3F_IED_les_IED” au début du script. On y trouve dedans les coordonnées XYZ, le type d'IED (Radio ou Bomb), la puissance de l'explosion déterminée par le nombre de roquettes 57mm à faire exploser à la position de l'IED lors du déclenchement. Les trois derniers tableaux doivent contenir obligatoirement “INIT”, nil et nil.
Pour connaître les coordonnées sur le terrain en étant directement dans le jeu, consultez l'article obtenir_coordonnees.
/** * Script créant des IEDs aux positions et paramètres définies ci-dessous dans le script * L'IED explose a l'approche d'un BLUEFOR dans un périmètre de 1.5m à 5m selon le type * Gère la destruction de l'IED par tir à balles ou par explosif * * Utilisation : * - Appelez ce script dans le fichier init.sqf par la commande suivante : nul = [] execVM “R3F_IED.sqf”; * - Créez vos propres IED en remplissant (en colonne) les tableaux commençant par “R3F_IED_les_IED” au début du script. * On y trouve dedans les coordonnées XYZ, le type d'IED (Radio ou Bomb), la puissance de l'explosion déterminée par * le nombre de roquettes 57mm à faire exploser à la position de l'IED lors du déclenchement. Les trois derniers tableaux * doivent contenir obligatoirement “INIT”, nil et nil. * * Pour connaître les coordonnées sur le terrain en étant directement dans le jeu, consultez l'article http://wiki.team-r3f.org/doku.php/scripts:obtenir_coordonnees * * @author : www.team-r3f.org */ // Décommentez cette ligne pour afficher un marqueur sur la position de chaque IED #define R3F_IED_MARQUEUR // Le script ne s'exécute que côté serveur if (isServer) then { // Définition des IEDs, remplir en colonne les tableaux suivants pour créer vos IEDs R3F_IED_les_IED_pos_X = [5245, 5208]; // Position X de l'IED sur le terrain R3F_IED_les_IED_pos_Y = [10885, 10885]; // Position Y de l'IED sur le terrain R3F_IED_les_IED_pos_Z = [0, 0]; // Hauteur de l'IED (utile dans les bâtiments) R3F_IED_les_IED_dir = [90, 0]; // Direction de l'IED (0 = nord) R3F_IED_les_IED_type = ["Radio", "Bomb"]; // Radio ou Bomb R3F_IED_les_IED_puissance = [1, 2]; // Nombre de roquettes 57mm à faire exploser R3F_IED_les_IED_etat = ["INIT", "INIT"]; // laisser à INIT (INIT, ACTIF, EXPLOSE, NEUTRALISE) R3F_IED_les_IED_objet = [nil, nil]; // laisser à nil (l'objet créé par creatVehicule) R3F_IED_les_IED_declencheur = [nil, nil]; // laisser à nil (déclencheur associé à l'IED) // Retourne l'indice correspondant à l'objet en paramètre R3F_IED_FNCT_get_index_depuis_objet_IED = { private ["_res", "_lObjet", "_i"]; _res = 999; _lObjet = _this select 0; for [{_i = 0}, {_i < count R3F_IED_les_IED_objet}, {_i = _i+1}] do { if ((R3F_IED_les_IED_objet select _i) == _lObjet) then { _res = _i; }; }; _res }; // Fait exploser l'IED correspondant au numéro en paramètre 0 ; paramètre 1 = NEUTRALISE ou EXPLOSE R3F_IED_FNCT_exploser_IED_index = { private ["_idx", "_nouvelEtat", "_lObjetIED", "_i", "_lExplosif"]; _idx = _this select 0; _nouvelEtat = _this select 1; _lObjetIED = R3F_IED_les_IED_objet select _idx; // L'IED saute, on détruit tout ce qui le concerne pour ne plus s'en occuper _lObjetIED removeAllEventHandlers "hit"; deleteVehicle (R3F_IED_les_IED_declencheur select _idx); deleteVehicle _lObjetIED; // Si l'IED est actif (normalement obligatoire selon le reste du programme) if (R3F_IED_les_IED_etat select _idx == "ACTIF") then { // On fait sauter l'IED en fonction de la puissance souhaitée for [{_i = 0}, {_i < R3F_IED_les_IED_puissance select _idx}, {_i = _i+1}] do { _lExplosif = "R_57mm_HE" createVehicle [R3F_IED_les_IED_pos_X select _idx, R3F_IED_les_IED_pos_Y select _idx, (R3F_IED_les_IED_pos_Z select _idx)+2]; _lExplosif setPos [R3F_IED_les_IED_pos_X select _idx, R3F_IED_les_IED_pos_Y select _idx, R3F_IED_les_IED_pos_Z select _idx]; }; R3F_IED_les_IED_etat set [_idx, _nouvelEtat]; }; }; // Initialisation des IEDs private ["_i"]; for [{_i = 0}, {_i < count R3F_IED_les_IED_pos_X}, {_i = _i+1}] do { private ["_posX", "_posY", "_posZ", "_dir", "_type", "_lObjetIED", "_leDeclencheur"]; _posX = R3F_IED_les_IED_pos_X select _i; _posY = R3F_IED_les_IED_pos_Y select _i; _posZ = R3F_IED_les_IED_pos_Z select _i; _dir = R3F_IED_les_IED_dir select _i; _type = R3F_IED_les_IED_type select _i; // Création de l'objet sur la carte _lObjetIED = _type createVehicle [_posX, _posY, _posZ]; _lObjetIED setPos [_posX, _posY, _posZ]; _lObjetIED setDir _dir; // On conserve un pointeur sur cet objet R3F_IED_les_IED_objet set [_i, _lObjetIED]; // Pour le débugage, pose un marqueur sur la carte à la position de l'IED #ifdef R3F_IED_MARQUEUR private ["_marqueur"]; _marqueur = createMarker[format["ied%1", _i], [_posX, _posY, _posZ]]; _marqueur setMarkerType "Dot"; _marqueur setMarkerColor "colorBlack"; #endif // Quand l'objet de l'IED reçoit des dommages (balle, grenade, ...) on le fait exploser _lObjetIED addEventHandler ["hit", {[[_this select 0] call R3F_IED_FNCT_get_index_depuis_objet_IED, "NEUTRALISE"] call R3F_IED_FNCT_exploser_IED_index}]; // On crée un déclencheur qui fera exploser quand un BLUEFOR se trouvera à 1.5m ou 5m (en fonction du type) de l'IED _leDeclencheur = createTrigger ["EmptyDetector", getPos _lObjetIED]; if (_type == "Bomb") then { _leDeclencheur setTriggerArea [5, 5, 0, false]; } else { _leDeclencheur setTriggerArea [1.5, 1.5, 0, false]; }; _leDeclencheur setTriggerActivation ["WEST", "PRESENT", false]; _leDeclencheur setTriggerStatements ["this", format["[%1, 'EXPLOSE'] call R3F_IED_FNCT_exploser_IED_index", _i], ""]; // On conserve un pointeur sur le déclencheur pour le supprimer R3F_IED_les_IED_declencheur set [_i, _leDeclencheur]; R3F_IED_les_IED_etat set [_i, "ACTIF"]; }; };