GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 26 Octobre 2010, 20:27:46

Titre: Precision sur le Getdate
Posté par: scott1 le 26 Octobre 2010, 20:27:46
Bonjour à toute et à tous,

J'aimerais savoir concretement ce que cette fonction fait.

J'ai compris elle compte le nombre de jour depuis le debut de l'année. Juste?

Si je fait un getdate le 2 décembre 2010 et que le 2 decembre 2011 j'en fait un nouveau et que je les compare, il seront considéré comme les meme ou pas?
Titre: Re : Precision sur le Getdate
Posté par: chneuls le 26 Octobre 2010, 20:58:49
Salut :)
La fonction getdate(); ou getdate(Year, Month, Day);
peut servir à deux choses, soit, avec les paramètres comme tu peut le constater, prend l'année, le mois et le jour, et si tu l'utilise sans les paramètres la fonction va compter le nombre de jour depuis le depuis de l'année ( ce qui peut être pratique pour certain script :D )

Si tu compare getdate(); pris le 2 décembre 2010 et le résultat du 2 décembre 2011 le résultats peut être le même si les deux années ont le même nombre de jours ( car il faut penser aux années bissextile :p )

A+ sous l'bus,
Sam.  :cheers
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 26 Octobre 2010, 22:14:46
ouai mais si les 2 ne sont pas bissextile ça ne prendra pas en compte =s
Titre: Re : Precision sur le Getdate
Posté par: Ssk le 26 Octobre 2010, 22:45:21
bah, cette fonction prend la date du jour tout simplement ^^
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 26 Octobre 2010, 22:47:43
je réfléchis comment faire pour savoir si 2 date diffère de 60jours, le soucis, s'est que si l'année change.

Genre le 29 décembre, et le 3janvier je vérifie si il differre de 60jour, ça va me dire que oui alors que non en fait.
Titre: Re : Precision sur le Getdate
Posté par: chneuls le 26 Octobre 2010, 23:02:27
Pour le milieu de l'année c'est simple, il suffit d'utiliser getdate(); et un jour dont tu connais son chiffre.

Par exemple

getdate(); va te donner le 60ème jour de l'année
mais comme toi tu connais le 120ème jour
tu peut faire la différence des deux et savoir donc qu'il y a 60 jours.
Sinon si c'est à cheval entre deux années, il faut que tu fait la différence du nombre de jour dans l'année (soit 365) et de la valeur de getdate();
puis à l'année suivante tu sais que tel jour est par exemple le 5ème.

donc tu calcul la valeur de getdate de l'an 2010 (par exemple 365 - 310) qui va être le 310 ème jour, donc 55 jours restant avant la fin de l'année que tu ajoutes au 5 jours passés à l'an 2011 ce qui donne par miracle 60 jours :D

Un problème se pose, les années bissextiles, dans ce cas il faudra que tu modifie 1 fois le nombre de jours si c'est le cas ^^
Titre: Re : Precision sur le Getdate
Posté par: Gilux le 26 Octobre 2010, 23:09:44
Je vais peut être dire une truc faux, mais il n'y a pas une histoire de date Unix (1/1/1970 - 0h00) ?
Titre: Re : Precision sur le Getdate
Posté par: dydjyz le 26 Octobre 2010, 23:24:53
C'est pas le timeshamp ou quelque chose dans le jors ce que tu dit gilux ? ^^
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 26 Octobre 2010, 23:43:22
mktime
timestamp

dans l'include uf.inc

Et donc celle la différencierais les 2 année?
Titre: Re : Re : Precision sur le Getdate
Posté par: scott1 le 26 Octobre 2010, 23:46:02
juste comme sa , cette fonction récupere la date entrée dans ton PC , je le sais a cause de mon PC dans lequel l'heure ni la date ne sont jamais réglé .

laquelle?
Titre: Re : Re : Precision sur le Getdate
Posté par: dydjyz le 26 Octobre 2010, 23:58:06
juste comme sa , cette fonction récupere la date entrée dans ton PC , je le sais a cause de mon PC dans lequel l'heure ni la date ne sont jamais réglé .

Peut-être qu'elle prend l'heure du serveur, car je pense que le serveur est allumé sur ton pc, le serveur est donc a l'heure de ton pc =)
Titre: Re : Re : Re : Re : Precision sur le Getdate
Posté par: dydjyz le 27 Octobre 2010, 00:00:08
juste comme sa , cette fonction récupere la date entrée dans ton PC , je le sais a cause de mon PC dans lequel l'heure ni la date ne sont jamais réglé .

laquelle?
getdate .
Et oui dydjyz quand j'dis celle du pc c'est = à celle du serveur  :happy

Ah ^^ car apart le serveur, j'voit pas ou la fonction pouvait aller chercher l'heure xD
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 00:06:47
Ben elle pourrais aller chercher l'heure sur le réseau sa-mp :D
Titre: Re : Precision sur le Getdate
Posté par: dydjyz le 27 Octobre 2010, 00:07:27
Jpense que sa bouffe moins de ressource de prendre l'heure sur le PC-Serveur xD
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 00:10:38
Ouais j'avoue mais bon, il faut explorer toute les solutions :D
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 00:37:33
Je ferais un autre système, quand il acheteeras sa plaque ça fera

...[vTemps] = 60*24;

et toute les heures je lui enlève 1

maintenant a lui afficher combien de jours il lui reste je me demande bien comment.

Si je fait ...[vtemps]/24

ça ne me donneras pas le nombre de jour.

Savez vous comment faire? Moi et les math ... ^^
Titre: Re : Precision sur le Getdate
Posté par: Katou76 le 27 Octobre 2010, 02:33:51
EN réseau local, l'heure du serveur est = au pc mais sur serveur dédié, c'est pas l'heure du réseau de samp mais du dédié(Kernel) sous linux ^^
Titre: Re : Precision sur le Getdate
Posté par: Myk3L le 27 Octobre 2010, 10:26:41
Ouais car sur deux serveurs (servffs) qui sont hébergés dans des pays différents (pas le même fuseau horaire hein !), prenez un RP et vous verez la différence de temps ... ça ne sera pas la même, testez ;)
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 10:36:15
J'ai fait un petit système d'assurance pour mon serveur, et enfaite j'ai utiliser la fonction GetDate();
Il te suffit de prendre le nombre du jour ou ton joueur achète sa plaque par exemple le 32 ème, et à chaque fois qu'il monte dans sa voiture ou qu'il se connecte, tu stock via GetDate(); les jours ( si c'est le même nombres tu fait rien, si c'est un nombre différent tu remplace) puis tu fait la différence de getdate(); - 32 = 60 alors là, tu lui enlève sa plaque ou je sais pas ce que tu veux faire ^^


Titre: Re : Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 12:41:58
Je ferais un autre système, quand il acheteeras sa plaque ça fera

...[vTemps] = 60*24;

et toute les heures je lui enlève 1

maintenant a lui afficher combien de jours il lui reste je me demande bien comment.

Si je fait ...[vtemps]/24

ça ne me donneras pas le nombre de jour.

Savez vous comment faire? Moi et les math ... ^^

quelqu'un sais comment faire? :D
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 14:51:30
Scott lis mon message précédent, j'ai expliquer  :...
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 14:56:11
Non mais j'ai décidé de le faire avec des heures pour plus de précision, et un getdate s'est beaucoup pour peux.

Un simple chiffre qui se soustrait de 1 chaque heure s'ets mieux et plus precis ^^
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 17:00:21
Ouais mais, c'est heure de conduite avec la plaque ou heure passé sur le serveur en général ?
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 17:38:54
je lance un timer d'une heure qui se repette et a chaque fois il enleve un a mon vtemps,

mais je ne sais pas comment transformet le vtemps en jours et heure. Ex vtemp = 50 => 2Jret2H
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 18:06:36
Je viens de coder ça de suite :
new time = 50; // en heure
new r1, r2, r3, heure;
r1 = floatround(time/24,floatround_round); // on arrondis le nombre le nombre de jours
r2 = time/r1; // on divise le nombre d'heure par le nombre de jours
r3 = r2-24; // On soustrais le nombre d'heure/ jours soit 25h - 24h on obtiens 1h en trop
heure = r3*r1; // donc on multiplie par le nombre de jours soit 1*2 = 2h
printf("jours : %d heures : %d", r1, heure);

Sur mes deux tests :
50 -> jours : 2 heures : 2
72 -> jours : 3 heures : 0

Essaye de comprendre le principe, si tu n'a pas compris je t'expliquerais ;)

edit : j'vais chez mon père là, j'aurais sûrment pas le pc, donc j'vais profiter pour faire la version avec les minutes aussi ^^
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 19:01:12
Merci, ça marche,

mais j'ai essayer en calculan avec 76, je suis arrive a un négatif xD.

Tu peux m'expliquer?
Titre: Re : Precision sur le Getdate
Posté par: S!m le 27 Octobre 2010, 19:29:31
Salut,

chneubeul, tu n'utilise pas la bonne méthode d'arrondissement, il faut arrondir vers le bas sinon on risque d'avoir 3 jours - 4 heures par exemple pour 68 heures.

utilise floatround_floor

et ta méthode n'est pas bonne, penses-y un peu plus:
nombre de jour = floatround(heures/24, floatround_floor);
nombre d'heures = heures - nombre de jour * 24;

++Sim++
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 20:19:22
je suis perdu la xD
Titre: Re : Precision sur le Getdate
Posté par: S!m le 27 Octobre 2010, 20:46:47
Salut,

très bien, allons y avec un exemple: tu cherche à trouver le nombre de jour et le nombre d'heure restant avec disons... 100 heures.

100 / 24 = 4.16666667 (périodique, mais bon...)

donc on arrondi vers le bas, on a donc 4 (ps. en fait on a pas besoin de floatround, que je sache l'arrondissement vers le bas est déjà bon de base, comme on calcule avec 2 entiers, le résultat est un entier.

Bref, on a 4 jours.
Le nombre d'heure restant?

simplement le nombre d'heures - le nombre d'heure dans 4 jours (4 * 24)

donc:

100 - 4 * 24 = 100 - 96 = 4 heures

Finalement, 100 heures représentent 4 jours et 4 heures.

C'est aussi simple que ça

++Sim++
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 21:05:34
J'ai coder ça à la rache, je devais allez chez mon père ^^
Titre: Re : Precision sur le Getdate
Posté par: scott1 le 27 Octobre 2010, 22:31:37
Merci Sim j'ai compris, donc je prend ton code et ça donne


pour ex 100h

new temp = 100;
new jour = floatround(temps/24, floatround_floor);
new herue = temps - jour * 24;
Titre: Re : Precision sur le Getdate
Posté par: chneubeul le 27 Octobre 2010, 23:32:53
Tu as tout compris :D
Si tu veux test prend un GM vide et dans ongamemodeinit(); tu colle ça (pour des raisons de rapidité pour éviter de lancé le jeux et tout)

new temp = 100;
new jour = floatround(temps/24, floatround_floor);
new heure = temps - jour * 24;
printf("Jours :  %d  --  Heures : %d ", jour, heure);

Puis tu lance la console et tu regardes dans celle ci tu verras marquer le nombre de jours et d'heure. :D