En sqf, avec :
nombrecivils : variable publique contenant le nombre de civils encore en vie
monobjectif : task créée en vue de libérer la digue
------------------------------------------------------------------------------------------------------------------------------------------------
- Code:
-
nombrecivils = 3;
_aliveciv1 = true;
_aliveciv2 = true;
_aliveciv3 = true;
while {taskstate monobjectif == "CREATED" || taskstate monobjectif == "ASSIGNED"} do {
if (!alive civ1 && _aliveciv1 == true) then {
_aliveciv1 = false ;
nombrecivils = nombrecivils - 1 ;
hint "Un otage vient de mourir" ;
};
if (!alive civ2 && _aliveciv2 == true) then {
_aliveciv2 = false ;
nombrecivils = nombrecivils - 1 ;
hint "Un otage vient de mourir" ;
};
if (!alive civ1 && _aliveciv3 == true) then {
_aliveciv3 = false ;
nombrecivils = nombrecivils - 1 ;
hint "Un otage vient de mourir" ;
};
if (nombrecivils == 0 && (taskstate monobjectif == "CREATED" || taskstate monobjectif == "ASSIGNED")) then {monobjectif settaskstate "FAILED";};
sleep 1;
};
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Ca c'est pour la solution 'bourrine' aussi nommée 'on fait pas dans la dentelle', et elle est même pas testée.
Pour ce qui est d'utiliser un tableau, je n'ai pas encore trop regardé les fonctions à disposition, donc je ne pourrais te dire.
Edit : Je viens de comprendre ton source :p
En sqf tu ne peux pas utiliser de goto : il faut le remplacer par un while {} do {};
Ensuite il te manque tous les ; à la fin des instructions contenues dans tes if :
{if (_x in (list _zone)) then {_cnt1 = _cnt1 + 1;};} foreach _arrayciv;
if (_cnt2 > _cnt1) then {hint "Un otage vient de mourir";};
Aisni que sur les 2 if finaux, qui de toute façon ne fonctionneront pas en sqf puisque pas de goto en sqf.
Je ne sais pas si la commande Exit; fonctionne dans les sqf.
J'ai une question en retour :
Comment fonctionne ta variable Zone pour que les civils morts en soient automatiquement retirés ? Ou est-ce une source possible de non fonctionnement du script ?
Hé hop, 24ème édition du post : tu pourrais envisager d'écrire ton code comme ça :
- Code:
-
_arrayciv = [civ1, civ2, civ3];
_cnt1 = 0;
_cnt2 = 3;
while {nombrecivils != 0} do {
sleep 5;
_cnt1 = 0;
{if (alive _x) then {_cnt1= _cnt1 + 1;};} foreach _arrayciv;
if (_cnt2 > _cnt1) then {
hint "Un otage vient de mourir";
_cnt2 = _cnt1;
nombrecivils = _cnt1;
};
};
Mais attention car on ne sort de la boucle que lorsque tous les civils sont morts...
Et si 2 otages viennent à mourir dans les 5 secondes, le message n'est plus bon non plus.
Voila M'sieur.