Wumbaloo Posted October 9, 2015 Share Posted October 9, 2015 Bonsoir, A court d'idée, la fatigue, j'ai demandé à un pote un élément en plus, à mettre dans une tableau concernant des factions. Il m'a proposé: la dernière connexion. Seulement, comme j'ai dis, la fatigue m'atteind, et je ne sais pas du tout comment faire pour arriver à faire ce genre de choses. Passer par une requête SQL qui stock dans la base de donnée une variable avec la dernière connexion? Le soucis étant que getTime renvoie seulement l'heure et les minutes. Des idées? J'ai vu que cette partie devenait active, j'en profite! Link to comment
Moderators Citizen Posted October 9, 2015 Moderators Share Posted October 9, 2015 Rien de plus simple, pour travailler avec des dates, il faut manipuler ce qu'on appelle des timestamps. Un timestamp est un nombre qui correspond au nombre de secondes qui s'est écoulé depuis le 1er Janvier 1970. Par exemple le timestamp 1443657600 correspond au 1er Octobre 2015. Pour récupérer ce timestamp, tu vas devoir utiliser getRealTime qui te renvoi par défaut un tableau qui va contenir le timestamp (et d'autres choses) correspondant à la date, l'heure et la seconde actuelles. Tu n'as absolument pas dit quelle base de donnée tu utilisais (SQLite ? MySQL) Pour MySQL, il faut créer une nouvelle colonne de type INTEGER et cocher la case unsigned (non signé). Lorsque le joueur se déconnecte: local currentTime = getRealTime() local timestamp = currentTime.timestamp et tu saves timestamp dans sa colonne. Lorsque le joueur se connecte, tu récupères le timestamp dans une variable genre lastConnectionTimestamp. Vu que c'est pour l'afficher dans un tableau ou panel, tu en as besoin côté client donc on va mettre un petit element data sur le joueur pour stocker notre lastConnectionTimestamp: setElementData(thePlayer, "lastConnectionTimestamp", lastConnectionTimestamp) Un element data est par défaut synchronisé entre le serverside et le clientside. Du côté client il ne te reste plus qu'à convertir le timstamp en date et afficher cette date dans ton tableau: local lastConnectionTimestamp = getElementData(localPlayer, "lastConnectionTimestamp") local lastConnectionDate = getRealTime(lastConnectionTimestamp) lastConnectionDate.monthday pour le numéro du jour. lastConnectionDate.month pour le numéro du mois. lastConnectionDate.year+1900 pour l'année (oui il est basé sur l'an 1900 celui là d'après le wiki oO). lastConnectionDate.hour pour l'heure. lastConnectionDate.minute pour les minutes. lastConnectionDate.second pour les secondes.(à toi de voir si t'as besoin d'un affichage aussi précis : D). N'hésite pas à redemander si tu n'as pas compris un passage. Link to comment
Wumbaloo Posted October 10, 2015 Author Share Posted October 10, 2015 J'ai réussi, en procédent comme suis: Quand le joueur se connecte, alors on lui attribue le setElementData comme tu as dis: setElementData ( source, "lastConnectionTimestamp", query["lastConnection"]) Ensuite, dès qu'il se déco', on attrape le timestamp et on l'insère dans la variable. local currentTime = getRealTime() local timestamp = currentTime.timestamp mysql:query("UPDATE compte SET lastConnection='".. timestamp.."' WHERE nom='".. quittingPlayerName .."'") Seulement, quand je fais une commande afin de récupérer le monthday, le month, l'hour et les minutes, ça m'affiche ça: Timestamp: day = 10, month = 9 ......... hour = 10, minute = 5 Alors que sur la base de donnée, j'ai bien mon timestamp 1444464349 qui correspond à Sat, 10 Oct 2015 10:07:57 +0200 via le site que tu as donné timestampgenerator.com J'ai trouvé plusieurs articles que je regarderais tout à l'heure, les voici: http://stackoverflow.com/questions/4105 ... -timestamp http://sql.sh/107-cast-timestamp-date Au faite, j'utilise MySQL Link to comment
Moderators Citizen Posted October 10, 2015 Moderators Share Posted October 10, 2015 Seulement, quand je fais une commande afin de récupérer le monthday, le month, l'hour et les minutes, ça m'affiche ça: Timestamp: day = 10, month = 9 ......... hour = 10, minute = 5 Bah oui, c'est le résultat attendu, quel est le problème ? Je veux bien comprendre que c'est pas le résultat que tu voulais, mais dans ce cas facilite moi la tâche en me disant exactement le résultat que tu souhaites avoir avec ce timestamp. Si tu veux pas le numéro du mois en chiffre mais en lettre, il va falloir que tu l'as convertisse, c'est pas compliqué mais ça dépends de la langue utilisé sur ton serveur. Mais avec ce qu'on a déjà, il est facile de faire un affichage comme ceci: 10/10/2015 10:05 Si ton problème est que le mois devrait être 10 et non pas 9, c'est parce que les mois sont compté à partir de 0 (Janvier) jusqu'à 11 (Décembre). J'attends ta réponse pour savoir réellement quel est le problème avec ça. Link to comment
Wumbaloo Posted October 10, 2015 Author Share Posted October 10, 2015 Enfaite, j'aimerai le résultat suivant en RFC 2822, par exemple mon timestamp donne Sat, 10 Oct 2015 10:07:57 via timestampgenerator.com, et j'aimerai avoir genre "Samedi 10 Octobre à 15h" Link to comment
Moderators Citizen Posted October 10, 2015 Moderators Share Posted October 10, 2015 j'aimerai avoir genre "Samedi 10 Octobre à 15h" Ok je vois, je t'ai fais la fonction de conversion en français et je me suis permis de rajouter l'année et les minutes: local _months = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"} local _weekdays = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"} function timeToFr(t) local year = t.year+1900 local monthFr = _months[t.month+1] local weekdayFr = _weekdays[t.weekday+1] local day = t.monthday local hours = t.hour -- à toi de voir si tu veux le forcer sur 2 chiffres local minutes = string.format("%02d", t.minute) -- force sur 2 chiffres return string.format("%s %s %s %s %sh%s", weekdayFr, day, monthFr, year, hours, minutes) end Exemple d'utilisation: local date = getRealTime(1444464349) outputChatBox(timeToFr(date)) -- Samedi 10 Octobre 2015 10h05 Link to comment
Wumbaloo Posted October 11, 2015 Author Share Posted October 11, 2015 En gros, c'est les arguments de getRealTime traduit avec des tables? Je ne comprends juste pas les deux dernières lignes, enfin, le %02d signifie que tu veux deux chiffre parce que %02 ? Ensuite, le string.format("%s %s %s %s %sh%s", ...) signifie que tu veux, sur la première ligne, le weekday, ensuite, le day, ensuite, le month, ensuite, le year puis l'hours puis les minutes? Sauf qu'on est en GMT +2 en France, je dois juste rajouter +2 quoi ? Link to comment
Moderators Citizen Posted October 11, 2015 Moderators Share Posted October 11, 2015 %02d signifie que je veux afficher un nombre (`d`) avec au moins deux chiffres (`2`) et rajouter des zeros si ce n'est pas le cas (`0`). Exemples: string.format("%02d", 5) -- "05" string.format("%02d", 10) -- "10" string.format("%02d", 123) -- "123" getRealTime utilise la date du système qui fait tourner le script dans lequel il est utilisé. Donc une date récupéré depuis un système en GMT+2, convertit en timestamp et sauvegardé en db, sera aussi en GMT+2 lorsqu'on fera la manipulation inverse si le système reste en GMT+2. Link to comment
Wumbaloo Posted October 11, 2015 Author Share Posted October 11, 2015 Ah d'acc, du coup, pour mon horloge j'aurai pu utilser ce système au lieu de surcharger les lignes avec if minutes < 10 then ajouter 0 devant les minutes. Merci. Link to comment
Moderators Citizen Posted October 11, 2015 Moderators Share Posted October 11, 2015 Oui tu aurais pu utiliser ça, c'est juste que ça tiens en 1 seule ligne mais au niveau performance, la différence est plus qu'insignifiante. Je pense quand même que ton if est plus performant que le string.format Link to comment
Wumbaloo Posted October 11, 2015 Author Share Posted October 11, 2015 Un grand merci à toi en tout cas! Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now