• 06 Juin 2026, 15:43:45


Auteur Sujet: Timer un peux special  (Lu 1151 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne scott1

  • *
  • Gangster
  • Messages: 1440
    • Voir le profil
Timer un peux special
« le: 07 Avril 2010, 13:48:47 »
Bonjour a tous,

J'aimerais savoir comment créer un timer qui se ne se repettent qu'a une certaine heure.

Ou comment faire que chaque fois qu'il est Xh30min  quelque chose se passe.

J'espère que vous m'avez compris mdr.

Merci d'avance.
Refait un Game mode a partir d'une page blanche



Mes partages:

Systeme de Radio avec Frequence Création

Ajouter des véhicule dans le LARP - Godfather Tuto

Anti Cheat "JunkBuster" traduit en FR Traduction

LARP Traduit FR, V0.3 Traduction

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Timer un peux special
« Réponse #1 le: 07 Avril 2010, 14:09:34 »
Il te faut faire un timer d'une minute (voire un peu moins car les timers ne sont pas très précis)
Dans le timer, tu testes si il est Xh30 (avec gettime tu récuperes les minutes et tu testes si elles sont égales à 30).
Si c'est le cas tu exécutes ton action.

NB : Il serait bon de protéger l'exécution de ton action par un flag pour éviter que dans certains cas elle soit exécutée deux fois.

++
Syg
Courtesy of GtaManiac

Hors ligne scott1

  • *
  • Gangster
  • Messages: 1440
    • Voir le profil
Re : Timer un peux special
« Réponse #2 le: 07 Avril 2010, 14:36:09 »
Il n'y a pas un autre moyen que le timer toute les minute?
Refait un Game mode a partir d'une page blanche



Mes partages:

Systeme de Radio avec Frequence Création

Ajouter des véhicule dans le LARP - Godfather Tuto

Anti Cheat "JunkBuster" traduit en FR Traduction

LARP Traduit FR, V0.3 Traduction

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Timer un peux special
« Réponse #3 le: 07 Avril 2010, 15:55:25 »
Non, car sinon, tu risques de louper certaines heures.
Par exemple, si tu lances un timer de 2 minutes à 17h23, il se déclenchera aux heures suivantes :
17h25, 17h27, 17h29, 17h31, 17h33, ... et tu ne tomberas donc jamais sur 17h30.

D'ailleurs, avec un timer d'une minute pile, vu l'imprécision de timer sous SAMP, il se peut que de temps en temps tu loupes certaine heures.
Par exemple, si tu lances un timer de 1 minutes à 17h26 mais qu'il dérive de 18 secondes à chaque échéance, il se déclenchera aux heures suivantes :
17h27m18s, 17h28m36s, 17h29m54s 17h31m12s 17h32m30s ... et tu ne tomberas donc jamais sur 17h30.

De plus, avec un timer d'une minute, ton action ne se déclenchera pas forcément à Xh30m00s.
Par exemple si tu lance un timer d'une minute (en admettant que les timers soient précis) à 17h28m24s, il se déclenchera aux heures suivantes :
17h29m24s, 17h30m24s, 17h31m24s, ....
Ton action ne sera donc pas exécuté à 17h30 pile mais à 17h30m24s (soit 24 secondes plus tard).

Pour une précision infaillible à la seconde près, il faut un timer de moins d'une seconde.
Mais dans ce cas, il faut éviter que l'action se répète.

Voici le code que je te conseille :
new ActionEffectuee = 0;
forward Action ();
public Action ()
{
new H, M, S;
gettime (H, M, S);

/* Si on est sur le bonne minute et que l'action n'a pas encore été effectuée */
if (M==30 && ActionEffectuee==0)
{
/* On effectue l'action à faire */
printf ("Heure d'exécution : %02d:%02d:%02d", H, M, S); // Pour contrôle
...

/* L'action a été effectuée pour cette minute, il ne faudra pas la refaire dans le même minute */
ActionEffectuee = 1;
}

/* Si on est plus dans la minute où l'action doit être effectuée */
else if (M != 30)
{
/* L'action sera à refaire */
ActionEffectuee = 0;
}
}

public OnGameModeInit ()
{
/* On démarre le timer */
SetTimer ("Action", 500, 1);

...
}
Avec ce code, tu es sur de ne louper aucune heure de déclenchement et le déclenchement se fera à l'heure pile (à la seconde près)
Le code n'effectue que 2 tests en temps normal ce qui ne consomme vraiment pas beaucoup de temps processeurs.

++
Syg
Courtesy of GtaManiac

Hors ligne scott1

  • *
  • Gangster
  • Messages: 1440
    • Voir le profil
Re : Timer un peux special
« Réponse #4 le: 07 Avril 2010, 16:45:01 »
Merci Syg !

S'est une petie action donc ça va encore ^^

Merci bien
Refait un Game mode a partir d'une page blanche



Mes partages:

Systeme de Radio avec Frequence Création

Ajouter des véhicule dans le LARP - Godfather Tuto

Anti Cheat "JunkBuster" traduit en FR Traduction

LARP Traduit FR, V0.3 Traduction

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Timer un peux special
« Réponse #5 le: 08 Avril 2010, 08:31:33 »
Euh c'est normal que ce soit un timer de 500 ms ?

Moi je te conseillerai de mettre plutot ca 5000 ms pour 50 secondes

SetTimer ("Action", 5000, 1);


A la place de

SetTimer ("Action", 500, 1);



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Timer un peux special
« Réponse #6 le: 08 Avril 2010, 10:36:39 »
Oui sazuke, c'est normal, lit bien toutes mes explications (même si elles sont chiantes) :

Pour une précision infaillible à la seconde près, il faut un timer de moins d'une seconde.

++
Syg
Courtesy of GtaManiac