Valentin3526 Posted October 14, 2015 Share Posted October 14, 2015 (edited) Salut, salut, je bloque sur mon script pour savoir ce que j'utilise pour "voir" depuis combiens de temps un joueur joue, je m'explique: Je veut que lors de la 1ère connexion d'un joueur (après être inscrit) une fonction vas récupérer depuis combien de temps il joue, vas le sauvegarder lors de sa déconnexion puis lors d'une nouvelle connexion de ce même joueurs, je temps de jeu se récupère puis sauvegarde le temps total en gros un peut ça: function connexion1() -- Ici je prend la date de son enregistrement end addEventHandler("Event", laSource, connexion1) -- event du type onPlayerConnect function temps() -- Ici je prend le temps réel end addEventHandler("Event", laSource, temps) -- event du type onClientRender ou un setTimer function fin() -- Ici je calcul "connexion1 - temps" pour prendre de temps de jeu end addEventHandler("Event", laSource, fin) -- event du type onPlayerQuit Pour cela, je ne sais pas si je dois utiliser convertServerTickToTimeStamp ou formatDate pour faire mes fonctions facilement. Edited October 16, 2015 by Guest Link to comment
Wumbaloo Posted October 14, 2015 Share Posted October 14, 2015 Tu peux faire ça avec un getTickCount et une base de donnée assez facilement, je pense. Link to comment
Valentin3526 Posted October 14, 2015 Author Share Posted October 14, 2015 Tu peux faire ça avec un getTickCount et une base de donnée assez facilement, je pense. j'ai essayé le résultat est pas terrible après 3h à scripter, je n'avais que le montant le plus grand affiché (exemple: 0j 3h, 0m, 0s ou même 0j 0h 41m, 0s), c'est pour ça que je demande avec 2 "useful function", pour que je puisse faire un script propre ^^ Link to comment
Wumbaloo Posted October 14, 2015 Share Posted October 14, 2015 Tu as complété avec ces 2 évents?: OnPlayerQuit OnPlayerJoin Link to comment
Valentin3526 Posted October 14, 2015 Author Share Posted October 14, 2015 Tu as complété avec ces 2 évents?: OnPlayerQuit OnPlayerJoin oui mon script était 90% fonctionnel la seul erreur était celle du temps de jeu incomplet... J'ai donc tout éffacé puis là je suis perdu Link to comment
Wumbaloo Posted October 14, 2015 Share Posted October 14, 2015 Tu devrais enlever ton onPlayerConnect et mettre onPlayerSpawn ou tu récupères et défini la variable temps que tu as dans ta base de donnée Ensuite l'event "onPlayerQuit" récupère cette variable et la stocke dans la base de donnée, en gros il fait l'inverse Je suis pas un pro en lua comme spécifié dans ma signature mais j'essaye de te donner des pistes comment moi je pense pouvoir faire Actuellement je suis sur portable, mais j'ai un script semblable sur mon serveur de dév, si ce que je t'ai dis ne t'apportes rien j'irai voir tout ça Tu as cherché sur le forum, mais en anglais ? Link to comment
Valentin3526 Posted October 15, 2015 Author Share Posted October 15, 2015 Tu devrais enlever ton onPlayerConnect et mettre onPlayerSpawn ou tu récupères et défini la variable temps que tu as dans ta base de donnéeEnsuite l'event "onPlayerQuit" récupère cette variable et la stocke dans la base de donnée, en gros il fait l'inverse Je suis pas un pro en lua comme spécifié dans ma signature mais j'essaye de te donner des pistes comment moi je pense pouvoir faire Actuellement je suis sur portable, mais j'ai un script semblable sur mon serveur de dév, si ce que je t'ai dis ne t'apportes rien j'irai voir tout ça Tu as cherché sur le forum, mais en anglais ? Ce que tu me dis "onPlayConnect" par "onPlayerSpawn" n'est ce que je cerche à changer car comme je l'ai dis ci-dessus le script marchait à 90% mais qu'il n'affichait pas le temps au complet... et puis nan je suis pas partis chercher sur le forum en Anglais car je demande juste si le mieux à utiliser est convertServerTickToTimeStamp ou formatDate rien de plus, je demande juste un conseil ^^ EDIT: Après je pense que je saurais me débrouiller seul pour le script, il est pas très compliquer à faire. Link to comment
Wumbaloo Posted October 15, 2015 Share Posted October 15, 2015 Ah pardon, j'avais pas bien compris alors. Je te conseil formatDate du coup qui te permet d'aller droit au but, c'est une fonction crée par un joueur, du coup, elle marche aussi avec le timestamp mais elle est déjà faite alors que si tu convertServerTickToTimestamp alors ensuite tu dois rédiger une fonction pour convertir le timestamp en heure. Voila mon avis là dessus. Link to comment
Valentin3526 Posted October 15, 2015 Author Share Posted October 15, 2015 Ah pardon, j'avais pas bien compris alors.Je te conseil formatDate du coup qui te permet d'aller droit au but, c'est une fonction crée par un joueur, du coup, elle marche aussi avec le timestamp mais elle est déjà faite alors que si tu convertServerTickToTimestamp alors ensuite tu dois rédiger une fonction pour convertir le timestamp en heure. Voila mon avis là dessus. Merci (on a enfin réussi à se comprendre ) il me reste plus qu'à faire le script. Merci encore pour l'avis et bonne continuation à toi Link to comment
Moderators Citizen Posted October 15, 2015 Moderators Share Posted October 15, 2015 Désolé de ne pas avoir pu te répondre plus tôt. Ce dont tu as besoin, c'est la fonction getRealTime() qui prend le temps (date, heures, minutes et secondes) de la machine qui fait tourner le script (comme c'est un script serveur, il prendra celui du serveur). Il retourne un tableau avec des valeurs dont sa représentation sous forme de timestamp. Le timestamp est utilisé pour représenter une date sous forme de nombre de secondes écoulées depuis le 1er Janvier 1970 00:00:00. Ainsi, si on prends 10 en tant que timestamp, il représente la date du 1er Janvier 1970 00:00:10 soit, 10 secondes après le nouvel an 1970. Je te laisse imaginer que le timestamp de la date actuelle est donc un très gros chiffre (Pour info, le timestamp du 14 Octobre 2015 00:00:00 est 1444860000) Ta colonne en base de donnée (MySQL ?) devra être du type BIGINT non signé (unsigned) pour être sûr d'être capable de stocker les gros timestamp futurs. Et voici la logique qui permet de tracker le temps de jeu total d'un joueur sur ton serveur en utilisant les timestamps: function connexion() local totalPlayTime = -- Ici tu récupères depuis la DB ou tu l'assignes à 0 si pas de valeur setElementData(player, "totalPlayTime", totalPlayTime) -- on le garde en mémoire pendant toute la session -- on prend le timestamp actuel et on le garde en mémore pendant toute la session local startTimestamp = getRealTime().timestamp setElementData(player, "startTimestamp", startTimestamp) end function deconnexion() local totalPlayTime = getPlayerTotalPlayTime(player) -- Ici sauvegarder totalPlayTime en DB end function getPlayerTotalPlayTime(player) -- on prend le timestamp du moment où il s'est connecté local startTimestamp = getElementData(player, "startTimestamp") or 0 -- on prend le timestamp actuel local finishTimestamp = getRealTime().timestamp -- on calcule le nombre de secondes jouées sur le serveur pour cette session local diffTimestamp = finishTimestamp - startTimestamp -- on récupère son temps de jeu total qu'il avait en se connectant local totalPlayTime = getElementData(player, "totalPlayTime") -- on ajoute son temps de jeu de cette session totalPlayTime = totalPlayTime + diffTimestamp return totalPlayTime end Je te laisse rajouter les events dont tu as besoin et remplacer les variables (genre player) et les morceaux de code manquants relatifs à ta DB. Si tu veux l'afficher dans une fenêtre de statistiques, dans les données que tu vas envoyer au client via un triggerClientEvent tu appelleras getPlayerTotalPlayTime avec en paramètre le client et tu enverras la valeur que te retourne cette méthode. Et du côté client, comme un humain n'est pas capable de convertir un timestamp en date de tête, tu pourras effectivement utiliser FormatDate, mais tu ne n'utiliseras donc cette fonction que pour de l'affichage, pas pour faire de la sauvegarde ou des calculs de durées comme te le proposait Wumbaloo, c'est le rôle du timestamp ça. Voilà, bonne chance et n'hésite pas à revenir poser des questions si besoin. Cordialement, Citizen Link to comment
Valentin3526 Posted October 16, 2015 Author Share Posted October 16, 2015 Merci à toi aussi pour la réponse, et puis pour la sauvegarde, je pense plus utiliser un xml (même si c'est plus long à faire), je manie pas trop les bdd (même si je pense que je vais m'y mettre car je commence à faire des scripts de plus en plus complexes et je vais pas faire un xml pour chacuns ^^) en tout cas merci aussi pour le petit bout d'info sur le BIGINT. 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