'LinKin Posted February 7, 2014 Share Posted February 7, 2014 Hello, I've been told MTA has a function to output the time format from ms (Obtained by getTickCount()). However I canno't find it How to turn those ms into Days:Hours:Mins format? Also, how can I refresh that time each minute that the player is in the server? Maybe a timer in a client-side script? Thanks. Link to comment
myonlake Posted February 7, 2014 Share Posted February 7, 2014 You can use the below code to format milliseconds to days, hours, minutes and seconds. function formatMilliseconds(milliseconds) local totalseconds = math.floor( milliseconds / 1000 ) milliseconds = milliseconds % 1000 local seconds = totalseconds % 60 local minutes = math.floor( totalseconds / 60 ) local hours = math.floor( minutes / 60 ) local days = math.floor( hours / 24 ) minutes = minutes % 60 hours = hours % 24 return string.format( "%03d:%02d:%02d:%02d:%03d", days, hours, minutes, seconds, milliseconds ) end You can use a timer so, that it goes through all the players at once, so that you won't have to define a timer on each player. Of course making it client-side would reduce any server-side lag, so I suppose you can use a timer. You can also use getTickCount do that, so it's up to you. Link to comment
'LinKin Posted February 7, 2014 Author Share Posted February 7, 2014 Thanks, I made this code by myself, it does the same thing (format ms) addCommandHandler("msform", function () local days = 0 local hours = 0 local mins = 0 local secs = 0 local playTime = --getSQLDatum() while playTime >= 1000 do if playTime >= 86400000 then days = days + 1 playTime = playTime - 86400000 elseif playTime >= 3600000 then hours = hours + 1 playTime = playTime - 3600000 elseif playTime >= 60000 then mins = mins + 1 playTime = playTime - 60000 elseif playTime >= 1000 then secs = secs + 1 playTime = playTime - 1000 end end outputChatBox(days.."D, "..hours.."H, "..mins.."M, "..secs.."S.") end) But I still don't really know how to refresh/update the time spent on server for a player each passed minute. I'm thinking about making a function that calls itself; for example, client-side (For avoiding a table containing timers and some other stuff) addEvent("onClientPlayerLogin", true) -- I will trigger this event with onPlayerLogin in the server-side file. function startTimer() setTimer(checkTimePlayed, 60000, 1) loginTime = getTickCount() end addEventHandler("onClientPlayerLogin", root, startTimer) function checkTimePlayed () local currentTime = getTickCount() local playTime = -- I will manage to get the playtime stored in the SQL db local newTime = currentTime - loginTime local finalTime = playTime + newTime -- updateSQL (I will call a server function to update the SQL column with the new value (finalTime)) -- This is what I mean; to set a timer that calls the same function each minute. setTimer(checkTimePlayed, 60000, 1) end Would that work? Link to comment
Bonsai Posted February 7, 2014 Share Posted February 7, 2014 If that timer triggers that function every 1 minute, you could just add 1 minute, or 60000 ms to playtime instead of calculating anything. Link to comment
'LinKin Posted February 7, 2014 Author Share Posted February 7, 2014 Yeah, just noticed that So it would work (the function that calls itself). Thanks Bons you sucka) Link to comment
Bonsai Posted February 7, 2014 Share Posted February 7, 2014 Yeah, just noticed that So it would work (the function that calls itself). Thanks Bons you sucka) 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