aski Posted April 1, 2014 Share Posted April 1, 2014 if somebody is able to combine the functions: exports.scoreboard:addScoreboardColumn('Online Time') local t = { } function checkValues( source,arg1,arg2) if (arg2 >= 60) then t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1 t[ source ][ 'sec' ] = 0 end if (arg1 >= 60) then t[ source ][ 'min' ] = 0 t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1 end return arg1, arg2 end setTimer( function( ) for _, v in pairs( getElementsByType( "player" ) ) do if (not t[ v ]) then t[ v ] = { ["hour"] = 0, ["min"] = 0, ["sec"] = 0 } end t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1 local min,sec = checkValues ( v, t[ v ][ 'min' ] or 0, t[ v ][ 'sec' ] or 0 ) local hour = tonumber( t[ v ][ 'hour' ] or 0 ) setElementData( v, "Online Time", tostring( hour )..':'..tostring( min )..':'..tostring( sec ) ) end end, 1000, 0 ) function onPlayerQuit ( ) local playeraccount = getPlayerAccount ( source ) if ( playeraccount ) and not isGuestAccount ( playeraccount ) then local sValue = getElementData( source,'Online Time' ) setAccountData ( playeraccount, "Online Time", tostring(sValue) ) end t[ source ] = nil end function onPlayerLogin (_, playeraccount ) if ( playeraccount ) then local time = getAccountData ( playeraccount, "Online Time" ) if ( time ) then setElementData ( source, "Online Time", time ) else setElementData ( source, "Online Time",0 ) setAccountData ( playeraccount, "Online Time",0 ) end end end addEventHandler ( "onPlayerQuit", root, onPlayerQuit ) addEventHandler ( "onPlayerLogin", root, onPlayerLogin ) of which: setAccountData getAccountData and explain? please Link to comment
justn Posted April 1, 2014 Share Posted April 1, 2014 Can you explain, what exactly are you trying to do ? You just made a post and ask someone to combine it when we don't know what you want ?! Link to comment
WhoAmI Posted April 1, 2014 Share Posted April 1, 2014 This script is already saving online time to account. Link to comment
aski Posted April 1, 2014 Author Share Posted April 1, 2014 but I need to would write after leaving the server and the entry time time to grow and after entering the server is not counted from the beginning. Sorry for my poor English Link to comment
iPrestege Posted April 1, 2014 Share Posted April 1, 2014 -- # Server Side : --[[ ------------------------------------------------- original script credits to Yakuza.Real and solidsnake and kenix viewtopic.php?f=91&t=40132 ------------------------------------------------- booo just fix it Mr.Pres[T]ege : Remake the script using ( SQL ) To Save it . ]] exports.scoreboard:addScoreboardColumn('PlayTime') addEventHandler('onResourceStart',resourceRoot, function ( ) executeSQLQuery ( 'CREATE TABLE IF NOT EXISTS Time_Table ( PlayerSerial,Hours,Minuts,Seconds,PlayAllTime )' ) outputDebugString ('Execute SQL Loadded !') end ) local t = { } function checkValues( source,arg1,arg2) if (arg2 >= 60) then t[ source ][ 'min' ] = tonumber( t[ source ][ 'min' ] or 0 ) + 1 t[ source ][ 'sec' ] = 0 end if (arg1 >= 60) then t[ source ][ 'min' ] = 0 t[ source ][ 'hour' ] = tonumber( t[ source ][ 'hour' ] or 0 ) + 1 end return arg1, arg2 end setTimer( function( ) for _, v in pairs( getElementsByType( 'player' ) ) do if (not t[ v ]) then t[ v ] = { ['hour'] = 0, ['min'] = 0, ['sec'] = 0 } end t[ v ][ 'sec' ] = tonumber( t[ v ][ 'sec' ] or 0 ) + 1 local min,sec = checkValues ( v, t[ v ][ 'min' ] or 0, t[ v ][ 'sec' ] or 0 ) local hour = tonumber( t[ v ][ 'hour' ] or 0 ) setElementData( v, 'PlayTime', tostring( hour )..':'..tostring( min )..':'..tostring( sec ) ) end end, 1000, 0 ) function SaveDataOnQuit ( ) local sValue = getElementData( source,'PlayTime' ) local hour = tonumber( t[ source ][ 'hour' ] or 0 ) local min = tonumber( t[ source ][ 'min' ] or 0 ) local sec = tonumber( t[ source ][ 'sec' ] or 0 ) local serial = getPlayerSerial ( source ) local Results = executeSQLQuery('SELECT * FROM Time_Table WHERE PlayerSerial=?',serial) if ( type ( Results ) == 'table' and #Results == 0 or not Results ) then executeSQLQuery ( 'INSERT INTO Time_Table ( PlayerSerial,Hours,Minuts,Seconds,PlayAllTime ) VALUES(?,?,?,?,?)',serial,hour,min,sec,sValue ) else executeSQLQuery('UPDATE Time_Table SET Hours =?, Minuts =?, Seconds =?, PlayAllTime =? WHERE PlayerSerial =?', hour, min, sec, sValue, serial) end t[ source ] = nil end addEventHandler('onPlayerQuit',root,SaveDataOnQuit) function SaveDataOnStop ( ) for k,v in ipairs ( getElementsByType('player') ) do local playeraccount = getPlayerAccount ( v ) local sValue = getElementData( v,'PlayTime' ) if not ( t [ v ] ) then t [ v ] = { } end local hour = tonumber( t[ v ][ 'hour' ] or 0 ) local min = tonumber( t[ v ][ 'min' ] or 0 ) local sec = tonumber( t[ v ][ 'sec' ] or 0 ) local serial = getPlayerSerial ( v ) local Results = executeSQLQuery('SELECT * FROM Time_Table WHERE PlayerSerial=?',getPlayerSerial ( v ) ) if ( type ( Results ) == 'table' and #Results == 0 or not Results ) then executeSQLQuery ( 'INSERT INTO Time_Table ( PlayerSerial,Hours,Minuts,Seconds,PlayAllTime ) VALUES(?,?,?,?,?)',serial,hour,min,sec,sValue ) else executeSQLQuery('UPDATE Time_Table SET Hours =?, Minuts =?, Seconds =?, PlayAllTime =? WHERE PlayerSerial =?', hour, min, sec, sValue, serial) end end end addEventHandler('onResourceStop',resourceRoot,SaveDataOnStop) function GetDataOnStart ( ) for _,v in ipairs ( getElementsByType ( 'player' ) ) do local Results = executeSQLQuery('SELECT * FROM Time_Table WHERE PlayerSerial=?',getPlayerSerial ( v ) ) if ( type ( Results ) == 'table' and #Results == 0 or not Results ) then return end if not t[ v ] then t[ v ] = {} end t[ v ]['hour'] = tonumber(Results[1]['Hours']) t[ v ]['min'] = tonumber(Results[1]['Minuts']) t[ v ]['sec'] = tonumber(Results[1]['Seconds']) end end addEventHandler('onResourceStart',resourceRoot,GetDataOnStart) function GetDataOnJoin ( ) local Results = executeSQLQuery('SELECT * FROM Time_Table WHERE PlayerSerial=?',getPlayerSerial ( source ) ) if ( type ( Results ) == 'table' and #Results == 0 or not Results ) then return end setElementData ( source, 'PlayTime', Results[1]['PlayAllTime'] ) if not t[ source ] then t[ source ] = {} end t[ source ]['hour'] = tonumber(Results[1]['Hours']) t[ source ]['min'] = tonumber(Results[1]['Minuts']) t[ source ]['sec'] = tonumber(Results[1]['Seconds']) end addEventHandler('onPlayerJoin',root,GetDataOnJoin) You can make it like this using SQLLite . executeSQLQuery Not sure but it should work. 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