Gaming Zone Communautes Battlefield PiTrust Communautes Mods

Inserer un timer.(COD et CODUO)

Retour au sommaire

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