Table des matières

Présentation

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, …).

Utilisation

- 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

/**
 * 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"];
	};
};
 
scripts/ied_engin_explosif_improvise.txt · Dernière modification: 13/10/2009 19:52 par madbull
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki