Jump to content

[Résolu] Que dois-je utiliser ?


Recommended Posts

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 by Guest
Link to comment
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

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
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 ?

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

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
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 :D) il me reste plus qu'à faire le script. Merci encore pour l'avis et bonne continuation à toi

Link to comment
  • Moderators

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 :mrgreen:

(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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...