Le Besoin

Voir, sur la map, la position de tous les joueurs ainsi que leur direction de déplacement.

Le Principe

Parcourir tous les slots de la mission et pour chaque slot :

  • Voir si le player du slot est vivant
  • Prendre son nom, sa position, sa direction
  • Faire un marqueur avec ces informations et le voir sur la map.

Le marqueur est local est propre à chaque joueur.

Préalable

Donnez un nom avec le même préfixe à tous les slots de votre map. Par ex

  • “soldat1”
  • “soldat2”
  • “soldat3”

Dans cet exemple le préfixe est soldat .

(Remarquez le nom du soldat “soldat1”)

Créé autant de soldat que vous avez besoin pour votre mission et pour chaque soldat, changez le nom avec votre préfixe plus le numéro d'ordre.

Appel du script

Le script est appelé par un déclencheur que vous avez posé, dans l'éditeur, sur la carte.

Attention à bien entrer dans le champs “Condition” :

local player

(Cela permettra au déclencheur de se lancer au bon moment.)


Attention aussi de bien saisir la ligne d'appel du script dans le champs “Sur act.” :

void = [3,"soldat"] execVM "show_players_markers.sqf";

(Cette ligne appellera le script)

Le Script

Enregistrer le code dans un fichier nommé par exemple “show_players_markers.sqf”

/*##################################################################
Etape d'initialisation
##################################################################*/
_nb_slot = 3;	 // Nb de slots fixé par defaut
_slot_name = "soldat";  // Nom des slots par défaut	
_arr_markers = []; // Tableau qui contiendra les marqueurs
/*#################################################################*/
 
/*##################################################################
Récupération et traitement des parametres
##################################################################*/
// Si le parametre 1 (nb de slot) est envoyé
if( (count _this) >0 )then {
	// On fixe le nb de slot avec le parametre passé à la fonction
	_nb_slot = _this select 0;
};
 
// Si le parametre 2 (Nom des slots) est envoyé
if( (count _this) >1 ) then {
	// On fixe le nom des slots avec le parametre passé à la fonction
	_slot_name = _this select 1;
};
/*#################################################################*/
 
/*##################################################################
Etape de creation des marqueurs
##################################################################*/
// Boucle sur le nombre de slot de la mission
for "_i" from 1 to _nb_slot do
{
	// On Créé un marquer local
	_marker = createMarkerLocal [ format["Marker_Slot#%1",_i],[0,0] ];
	// On ajoute ce marqueur au tableau des marqueurs
	_arr_markers = _arr_markers + [ _marker ];
	// Marqueur de type fleche
	_marker setMarkerTypeLocal "Arrow";
	// Marqueur de couleur jaune
	_marker setMarkerColorLocal "ColorGreen";
	// Marquer de petite taille
	_marker setMarkerSizeLocal [0.5, 0.5];
};
/*#################################################################*/
 
 
/*##################################################################
Etape d'affichage des marqueurs
##################################################################*/
// Boucle sans fin
_les_poules_auront_des_dents = false;
while { ! (_les_poules_auront_des_dents) } do
{
	// Boucle sur le nombre de slot de la mission
	for "_i" from 1 to _nb_slot do
	{
		// Creation de la variable représentant le joueur
		_joueur = [] call compile format ["%1%2",_slot_name,_i];
 
		// On ressort du tableau des marqueurs celui qui correspond au joueur
		_marker = _arr_markers select (_i - 1);
		// Si le joueur est toujours vivant
		if (  ! isnil ("_joueur") )then {
			if( alive _joueur ) then
			{
				// On reposition son marquer en fonction de la position du joueur sur la map
				_marker setmarkerposlocal ( getpos (vehicle _joueur) );
				// On oriente son marquer (fleche) en fonction de la direction du joueur sur la map
				_marker setmarkerdirlocal ( getdir (vehicle _joueur) );
				// Attribution du nom du joueur au marqueur
				_marker setmarkertextlocal format ["%1", ( name _joueur ) ];
			} else {
				// On depla provisoirement le marquer dans une zone non-visible pour le masquer
				_marker setmarkerposlocal [0,0];
			};
		};
	};
	sleep 1; // On laisse le neurone de notre PC se reposer un peu (mais pas trop, il pourrait en prendre l'habitude).
};
/*#################################################################*/

Notes

  • Remerciements aux R3F pour leur précieuse aide à la réalisation de cette fonction.
  • A KilJoy (Evolution) dont je me suis inspiré pour l'écrire de cette fonction.

—- clint 03/10/2009 22:08

 
scripts/map-show-players.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