Heli_extract

Ce code à pour but de faire venir un hélicoptère pour s'extraire

d'un endroit et de situer sur la carte le point où on demandera au pilote de nous déposer.

Mise en place

Dans l'éditeur insérer un marquer nommé mk_heli.

Se sera l'endroit d'où l'helico se créé et décollera

Insérer une nouvelle action dans le menu action.

idx_action = player addAction ["Extraction en Helico", "evac.sqf",[],-1,false];

On pourrait imaginer placer ce code dans le champs Init du joueur dans l'éditeur, ou bien sur un déclencheur radio. etc…

Le code

Version sans fumigène

private ["_p","_gp","_posP","_nearest","_sortie","_nobjects"]; //Quelques variables locales
 
_p= _this select 0;	// _p contient le joueur qui a activé le script
_gp= group _p;		// _gp contient le groupe du joueur
_posP=position _p;	// _posP contient la position du joueur
 
_p removeAction idx_action;//On retire l'action sur la roulette pour éviter de déclencher le script x fois de suite
 
sleep 1;//On calme un peu le jeu
[WEST,"HQ"] sideChat "HQ : Reçu pour votre demande d'évacuation, nous vous envoyons Delta 4 dès que possible. Terminé";
sleep 15;
 
 
_pos=getMarkerPos "mk_heli"; //Récupération de la position du marker pour savoir où créer l"helico
 
/*On créé un marqueur sur la map à l'emplacement du joueur. Juste pour faire beau.
* et montrer au joueur que l'on a bien pris en compte son clique
*/
_marker = createMarker ["EVAC", _posP ];
_marker setMarkerShape "ICON";
_marker setMarkerType "MOVE";
_marker setMarkerText  "Evacuation héliportée";
 
//Creation de l'helico
helico = "UH60MG" createVehicle _pos;
 
//On ajoute à l'hélico un eventHandler pour savoir quand quelqu'un monte dedans
p=_p;
Evt = helico addEventHandler ["getin", {if (_this select 2 == p) then {in_board=true};}];
//On lui ajoute un eventHandler pour savoir quand quelqu'un en descend
Evt = helico addEventHandler ["getout", {if (_this select 2 == p) then {in_board=false};}];
 
//On créé le pilote
"SoldierWPilot" createUnit [[(_pos select 0)+2,(_pos select 1)+2,(_pos select 2)], _gp," driver1=this;",0.9,"sergent"];
driver1 groupChat "Delta 4 : Bonjour. Ok pour l'évacuation. Je met en route et j'arrive !!!";
 
driver1 moveInDriver helico; //On fait monter le pilote dans l'helico
driver1 action ["engineOn", helico]; //On met le moteur de l'hélico en route
driver1 doMove (_posP); //On envoi le tout vers la position du joueur
 
/*
On prepare une petite boucle qui va tester si l'helico
arrive dans une zone proche du joueur (1000m)
*/
_sortie=false;
while {(alive _p) && (!_sortie)} do {
	_nearest = objNull;	
	// On cherche les objets aériens dans un périmètre de 1000 m
	_nobjects = nearestObjects [_p, ["Air"],1000];
	sleep 0.1;	
	//Si on a trouvé au moins un objet
	if (count _nobjects > 0) then {
		_nearest = _nobjects select 0;
		//On regarde s'il correspond à notre hélico
		if( _nearest==helico)then {
			sleep 0.1;
			//On sort de la boucle
			_sortie = true;							
		};
	};
 
};
//L'hélico est sur la zone
 
sleep 14; //On calme un peu le jeu
driver1 groupChat "Delta 4 : Dégagez la zone, je descend !!!";
helico flyInHeight 2; //On demande à l'hélico de se positionner à quelques mettre du sol
 
 
//On attent que le joueur monte dans l'helico.
//C'est l"eventHandler qui règle le tout. Quand le joueur monte dans l'helico la variable in_board est mise à true.
waitUntil{in_board}; // On attend que le joueur monte
driver1 groupChat "Delta 4 : Bienvenue à bord."; // Il est à bord
sleep 1;
 
//On indique au joueur de cliquer sur la map pour savoir où il faudra se rendre
driver1 groupChat "Delta 4 : Cliquez sur la carte pour sélectionner le point où vous voulez vous rendre";
map_click=false;
onMapSingleClick "newpos=_pos;map_click=true;onMapSingleClick """";";
waitUntil{map_click}; //On attend qu'il clique
//Quand il a cliqué, la position est rangée dans la variable newpos
 
//On créé un marqueur à l'emplacement du clique. Il se sert à rien, c'est juste pour faire beau
//et pour montrer au joueur qu'on a bien pris son clique en compte
_marker = createMarker ["DEPOSE", newpos];
_marker setMarkerShape "ICON";
_marker setMarkerType "FireMission";
_marker setMarkerText  "Dépose héliportée";
 
sleep 2;
 
helico flyInHeight 50; //On demande à l'helico de reprendre de l'altitude
driver1 doMove (newpos); //On demande au pilote de se rendre à l'endroit cliqué sur la carte
 
/*
On prepare une petite boucle qui va tester si l'helico
arrive dans une zone proche du joueur (1000m)
*/
_sortie=false;
while {(alive _p) && (!_sortie)} do {
	_nearest = objNull;	
	_pos=getMarkerPos "DEPOSE";
	_nobjects = nearestObjects [_pos, ["Air"],1000];
	sleep 0.1;	
	if (count _nobjects > 0) then {
		_nearest = _nobjects select 0;
		if( _nearest==helico)then {
			sleep 0.1;
			_sortie = true;							
		};
	};
};
 
sleep 14;
driver1 groupChat "Delta 4 : Sur zone. Attention à la marche en descendant !";
helico flyInHeight 1; //On descend l'altitude de l'hélico
 
//On attend que le joueur descend
//C'est le evntHandler initialisé au démarrage qui nous l'indiquera
waitUntil{!in_board};
_p groupChat "Merci pour la promenade Delta 4, bon retour !";
 
helico flyInHeight 50;//Le joueur est descendu, on demande à l'hélico de repartir
 
driver1 doMove ([1,1,50]);//On expédie l'hélico à tataouine les bains
 
//On efface les marquer qu'on avait mis sur la carte pour faire joli.
deleteMarker "EVAC";
deleteMarker "DEPOSE";
 
sleep 60; //on attend un peu que l'helico s'éloigne
 
//quand il est assez loin, on l'efface ainsi que son pilote
deleteVehicle driver1;
deleteVehicle helico; 
 
//On redonne au joueur l'action qui permet de redemander une évacuation
idx_action = _p addAction ["Extraction", "evac.sqf",[],-1,false];
 
if (true) exitWith {}; //C'est fini, on quitte le script

Les paramètres

Le joueur est le seul paramètre du script

—- clint 21/03/2009 23:24

 
scripts/heli_extract.txt · Dernière modification: 12/04/2011 21:57 (modification externe)
 
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