Script compte à rebours

Pour les Masochistes Éditeurs de missions
Répondre
Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Script compte à rebours

Message 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:
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Freshmeat
Retraité
Retraité
Messages : 474
Enregistré le : lun. 1 mars 2010, 13:49

Re: Script compte à rebours

Message 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é.
Les gens n'accordent guère d'importance à la vie, la preuve : quand ils la perdent, ils ne la réclament jamais.
[Jean Deluca]
Image

Répondre