Page 1 sur 1

Script compte à rebours

Posté : jeu. 14 oct. 2010, 00:13
par =[TTK]= Yourry
Yop la compagnie, les scripts et moi cela fait deux:
je voulais juste faire un compte a rebours pour une mission avec la particularité d'avoir le comptage du temps comme cela

affichage du temps restant toutes les 15 minutes
puis lorsqu'il reste 10 minutes affichage du temps toutes les 4 minutes
quand il reste 4 minutes affichage toutes les minutes
pour finir quand il reste 1 minutes affichage toutes les secondes
ET PAF fin de mission

sauf que mon .sqf ne fonctionne pas....

Code : Tout sélectionner

if (!isServer) exitWith {};
 

 _limite = _this select 0;
_dec = 900;
 
for [{_i = _limite},{_i > 0},{_i = _i - _dec}] do {
    hintsilent format['%1 secondes',_i];
    Sleep _dec;
    if (_i <= 600) then  {exitWith};    
        
};
    _dec=240;
for [{_i = _limite},{_i > 0},{_i = _i - _dec}] do 
{
    hintsilent format['%1 secondes',_i];
    Sleep _dec;
    if (_i <= 240) then  {exitWith};    
};    
    _dec=60;
for [{_i = _limite},{_i > 0},{_i = _i - _dec}] do 
{
    hintsilent format['%1 secondes',_i];
    Sleep _dec;
    if (_i <= 120) then  {exitWith};    
};    
    _dec=1;
for [{_i = _limite},{_i > 0},{_i = _i - _dec}] do 
{
    hintsilent format['%1 secondes',_i];
    Sleep _dec;
    hint"1s";
    if (_i <= 1) then  {exitWith};    
};    
 
hint 'Temps écoulé, fin de mission';

if (true) exitWith {};

Il ne s'agit pas d'une erreur de syntaxe apriori car je n'ai pas de message d'erreur.

:mrgreen:

Re: Script compte à rebours

Posté : jeu. 14 oct. 2010, 09:25
par =[TTK]= Freshmeat
Je reste sur ma position d'hier soir :

Code : Tout sélectionner

if (isServer) then {

_limite = _this select 0;
_dec = 900;
_i = _limite;

while {_i > 0} do {
    hintsilent format['%1 seconde(s)',_i];
    _i = _i - _dec;
    Sleep _dec;
    if (_i <= 600) then  {_dec = 240;};    
    if (_i <= 240) then  {_dec = 60;}; 
    if (_i <= 120) then  {_dec = 1;}; 
};

hint 'Temps écoulé, fin de mission';

};
Je tiens à porter ton attention sur les points suivants :
- tel quel, ce script ne s'exécute que sur le serveur puisque tu as mis le test sur 'isserver' au début. Donc ton décompte ne sera vu que par le joueur jouant sur le serveur, soit par personne si tu mets ta mission sur un serveur dédié. En effet, la commande 'hintsilent' a une exécution locale, elle n'est donc effective que sur la machine sur laquelle elle est exécutée (ici le serveur).
- dans ton script, à chaque fois que tu franchis un seuil, tu réinitialises _i avec _limite, autrement dit, tu fais repartir ton chrono depuis le départ :
for [{_i = _limite},{_i > 0},{_i = _i - _dec}] do
- Si tu te décidais à faire tourner ce script sur chaque machine, fait attention aux joueurs qui rejoignent la mission en cours.
- Ci-dessous la version 'bis' :
pour lancer le script :

Code : Tout sélectionner

_handle = [[3600,600,240,120,0],[900,240,60,1,0]] execVM "decompte.sqf
Dans le premier tableau ([3600,600,240,120,0]), tu passes le temps maximum suivi des seuils.
Dans le second tableau ([900,240,60,1,0]), tu passes le délais en secondes entre chaque hint.

Et le script "decompte.sqf" :

Code : Tout sélectionner

if (isServer) then {

_limites = _this select 0;
_decs = _this select 1;

_level = 1;

_i = _limites select 0;
_dec = _decs select 0;

while {_i > 0} do {
    hintsilent format['%1 seconde(s)',_i];
    _i = _i - _dec;
    Sleep _dec;
    if (_i <= _limites select _level) then {_dec = _decs select _level;_level = _level+1;};    
};

hint 'Temps écoulé, fin de mission';

};
Enfin, je te confirme que je n'ai rien testé.