Jump to content

set/get AccountData


aski

Recommended Posts

Posted

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

Posted

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

Posted

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

Posted
-- # 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.

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