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
-
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?
-
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
-
ouai mais si les 2 ne sont pas bissextile ça ne prendra pas en compte =s
-
bah, cette fonction prend la date du jour tout simplement ^^
-
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.
-
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 ^^
-
Je vais peut être dire une truc faux, mais il n'y a pas une histoire de date Unix (1/1/1970 - 0h00) ?
-
C'est pas le timeshamp ou quelque chose dans le jors ce que tu dit gilux ? ^^
-
mktime
timestamp
dans l'include uf.inc
Et donc celle la différencierais les 2 année?
-
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?
-
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 =)
-
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
-
Ben elle pourrais aller chercher l'heure sur le réseau sa-mp :D
-
Jpense que sa bouffe moins de ressource de prendre l'heure sur le PC-Serveur xD
-
Ouais j'avoue mais bon, il faut explorer toute les solutions :D
-
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 ... ^^
-
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 ^^
-
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 ;)
-
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 ^^
-
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
-
Scott lis mon message précédent, j'ai expliquer :...
-
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 ^^
-
Ouais mais, c'est heure de conduite avec la plaque ou heure passé sur le serveur en général ?
-
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
-
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 ^^
-
Merci, ça marche,
mais j'ai essayer en calculan avec 76, je suis arrive a un négatif xD.
Tu peux m'expliquer?
-
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++
-
je suis perdu la xD
-
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++
-
J'ai coder ça à la rache, je devais allez chez mon père ^^
-
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;
-
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