Inserer un timer.(COD et CODUO)
Tutorial de Tropheus
Au cours de ce tutorial vous allez apprendre à mettre en place un timer et
définir son affichage.
Comme
sur les screenshots ci–dessous.



1/ MAPPING
Rien de spécial mise à part si vous voulez déclencher le timer au passage d'un trigger. Mais bon je pense que vous êtes habitués à ce genre de problème.
2/ SCRIPTING
a/ Fichier .gsc
Voici le script que j'ai utilisé (et trouvé sur la map Pavlov) qui vous montre 3 positions possibles.
main()
{
maps\_load::main();
//GIVE
PLAYER WEAPONS
level.player takeallweapons();
level.player giveWeapon("panzerfaust");
level.player giveWeapon("thompson");
level.player giveWeapon("colt");
level.player giveWeapon("fraggrenade");
level.player switchToWeapon("thompson");
//thread fin_spawn_init();
level.stopwatch=0.5;
thread
position1();
}
position1()
{
iprintlnbold("x=420+left et y=150+middle");
fMissionLength = level.stopwatch; //how long until relieved
(minutes)
iMissionTime_ms = gettime() + (int)(fMissionLength*60*1000);
//convert to milliseconds
// Setup the HUD display of the timer.
level.hudTimerIndex = 20;
hdGetTimerString(getTime()+(level.stopwatch*60*1000), "downremove"));
level.timer = newHudElem();
level.timer.alignX = "left";
level.timer.alignY = "middle";
level.timer.x = 420;
level.timer.y = 150;
level.timer.label = &"HORLOGE_HORLOGE_TEXTE";
level.timer setTimer(level.stopwatch*60);
wait((level.stopwatch*60) / 2);
maps\_utility::autosave(1);
wait((level.stopwatch*60) / 2);
level.timer destroy();
iprintlnbold("Merci d'avoir attendu la fin du décompte !");
thread position2();
}
position2()
{
iprintlnbold("x=420+left et y=410+middle");
fMissionLength = level.stopwatch; //how long until relieved
(minutes)
iMissionTime_ms = gettime() + (int)(fMissionLength*60*1000);
//convert to milliseconds
// Setup the HUD display of the timer.
level.hudTimerIndex = 20;
hdGetTimerString(getTime()+(level.stopwatch*60*1000), "downremove"));
level.timer = newHudElem();
level.timer.alignX = "left";
level.timer.alignY = "middle";
level.timer.x = 420;
level.timer.y = 410;
level.timer.label = &"HORLOGE_HORLOGE_TEXTE";
level.timer setTimer(level.stopwatch*60);
wait((level.stopwatch*60)
/ 2);
maps\_utility::autosave(2);
wait((level.stopwatch*60) / 2);
level.timer destroy();
iprintlnbold("Merci d'avoir attendu la fin du décompte !");
thread position3();
}
position3()
{
iprintlnbold("x=150+center et y=100+middle");
fMissionLength = level.stopwatch; //how long until relieved
(minutes)
iMissionTime_ms = gettime() + (int)(fMissionLength*60*1000);
//convert to milliseconds
// Setup the HUD display of the timer.
level.hudTimerIndex = 20;
hdGetTimerString(getTime()+(level.stopwatch*60*1000), "downremove"));
level.timer = newHudElem();
level.timer.alignX = "center";
level.timer.alignY = "middle";
level.timer.x = 150;
level.timer.y = 100;
level.timer.label = &"HORLOGE_HORLOGE_TEXTE";
level.timer setTimer(level.stopwatch*60);
wait((level.stopwatch*60) / 2);
maps\_utility::autosave(3);
wait((level.stopwatch*60) / 2);
level.timer destroy();
iprintlnbold("Merci d'avoir attendu la fin du décompte !");
}
Explications.
main()
{
maps\_load::main();
//GIVE
PLAYER WEAPONS
level.player takeallweapons();
level.player giveWeapon("panzerfaust");
level.player giveWeapon("thompson");
level.player giveWeapon("colt");
level.player giveWeapon("fraggrenade");
level.player switchToWeapon("thompson");
//thread fin_spawn_init();
level.stopwatch=0.5;//temps du timer exprimer en minute (0.5 = 30 secondes)
thread
position1();
}
position1()
{
iprintlnbold("x=420+left et y=150+middle");//affichage écran
fMissionLength = level.stopwatch; //temps de la mission en
minute.
iMissionTime_ms = gettime() + (int)(fMissionLength*60*1000); //conversion en millisecondes
// Setup the HUD display of the timer.//mise
en place du timer.
level.hudTimerIndex = 20;//Je pense
que c'est la taille réservée à l'emplacement du compteur mais j'en suis pas sur.
hdGetTimerString(getTime()+(level.stopwatch*60*1000), "downremove"));//affichage
du timer.
level.timer = newHudElem();//????????je ne sais pas.
level.timer.alignX = "left";//alignement en X
level.timer.alignY = "middle";//alignement en Y
level.timer.x = 420;//position du timer en X
level.timer.y = 150;//position du timer en Y
level.timer.label = &"HORLOGE_HORLOGE_TEXTE";//on
prend le texte defini dans le fichier str
level.timer setTimer(level.stopwatch*60);//activation
du timer avec la valeur level.stopwatch
wait((level.stopwatch*60)
/ 2);//on
attend que la valeur de level.stopwatch soit à sa moitié.
maps\_utility::autosave(1);// pour sauvegarder
le jeu. Cette ligne n'est pas indispensable.
Seules la précédente et la suivante wait((level.stopwatch*60)
/ 2); le sont.
wait((level.stopwatch*60) / 2);//on
attend que la valeur de level.stopwatch soit à sa moitié ????????
ici je ne sais pas pourquoi il faut le remettre sauf que si elle
n'est pas là le timer s'arrête à la moitié.
level.timer destroy();//destruction du timer de son affichage.
iprintlnbold("Merci d'avoir attendu la fin du décompte
!");
thread position2();
}
position2()
{
iprintlnbold("x=420+left et y=410+middle");
fMissionLength = level.stopwatch; //how long until relieved
(minutes)
iMissionTime_ms = gettime() + (int)(fMissionLength*60*1000);
//convert to milliseconds
// Setup the HUD display of the timer.
level.hudTimerIndex = 20;
hdGetTimerString(getTime()+(level.stopwatch*60*1000), "downremove"));
level.timer = newHudElem();
level.timer.alignX = "left";
level.timer.alignY = "middle";
level.timer.x = 420;
level.timer.y = 410;
level.timer.label = &"HORLOGE_HORLOGE_TEXTE";
level.timer setTimer(level.stopwatch*60);
wait((level.stopwatch*60)
/ 2);
maps\_utility::autosave(2);
wait((level.stopwatch*60) / 2);
level.timer destroy();
iprintlnbold("Merci d'avoir attendu la fin du décompte
!");
thread position3();
}
position3()
{
iprintlnbold("x=150+center et y=100+middle");
fMissionLength = level.stopwatch; //how long until relieved
(minutes)
iMissionTime_ms = gettime() + (int)(fMissionLength*60*1000);
//convert to milliseconds
// Setup the HUD display of the timer.
level.hudTimerIndex = 20;
hdGetTimerString(getTime()+(level.stopwatch*60*1000), "downremove"));
level.timer = newHudElem();
level.timer.alignX = "center";
level.timer.alignY = "middle";
level.timer.x = 150;
level.timer.y = 100;
level.timer.label = &"HORLOGE_HORLOGE_TEXTE";
level.timer setTimer(level.stopwatch*60);
wait((level.stopwatch*60)
/ 2);
maps\_utility::autosave(3);
wait((level.stopwatch*60) / 2);
level.timer destroy();
iprintlnbold("Merci d'avoir attendu la fin du décompte
!");
}
Définir les positions du texte.
Pour cela vous jouez avec les valeurs
level.timer.x
et
level.timer.y
Ensuite à cette place vous pouvez choisir de positionner votre texte comme vous le voulez si jamais il est trop long et qu'il sort de l'écran.
Pour cela vous allez jouez avec les valeurs.
level.timer.alignX avec
comme possibilités." left" / "center" / "right"
et
level.timer.alingY avec comme possibilités." top" / "middle" / "bottom"
b/ Fichier .str.
Toujours dans un dossiers
localizedstrings/french dans votre pk3 au nom de votre map. (ici horloge.str)
Ici %s récupère la valeur
du timerpour l'afficher à l'écran.
^1 donne un texte rouge
^2 donne un texte vert
^3 donne un texte jaune
^4 donne un texte bleu
^5 donne un texte cyan
^6 donne un texte rose
^7 donne un texte blanc
^8 donne un texte noir
^9 donne un texte noir
REFERENCE HORLOGE_TEXTE
LANG_FRENCH "^1Merci %s d'attendre encore
un
peu."
ENDMARKER
Télécharger l'exemple (pour CODUO seulement.)
Pour CaskamiProd
by Tropheus©
septembre 2005